+++ /dev/null
-package tim.prune.correlate;
-
-import tim.prune.data.DataPoint;
-import tim.prune.data.MediaObject;
-
-/**
- * Class to hold a pair of points used to hold the result of correlation
- */
-public class PointMediaPair
-{
- private MediaObject _media = null;
- private DataPoint _pointBefore = null;
- private DataPoint _pointAfter = null;
- private long _secondsBefore = 1L;
- private long _secondsAfter = -1L;
-
-
- /**
- * Constructor
- * @param inMedia media object
- */
- public PointMediaPair(MediaObject inMedia) {
- _media = inMedia;
- }
-
- /**
- * Add a point to the pair
- * @param inPoint data point
- * @param inSeconds number of seconds time difference, positive means point later
- */
- public void addPoint(DataPoint inPoint, long inSeconds)
- {
- // Check if point is closest point before
- if (inSeconds <= 0)
- {
- // point stamp is before media stamp
- if (inSeconds > _secondsBefore || _secondsBefore > 0L)
- {
- // point stamp is nearer to media
- _pointBefore = inPoint;
- _secondsBefore = inSeconds;
- }
- }
- // Check if point is closest point after
- if (inSeconds >= 0)
- {
- // point stamp is after media stamp
- if (inSeconds < _secondsAfter || _secondsAfter < 0L)
- {
- // point stamp is nearer to media
- _pointAfter = inPoint;
- _secondsAfter = inSeconds;
- }
- }
- }
-
-
- /**
- * @return Media object
- */
- public MediaObject getMedia() {
- return _media;
- }
-
- /**
- * @return the closest point before the media
- */
- public DataPoint getPointBefore() {
- return _pointBefore;
- }
-
- /**
- * @return number of seconds between media and subsequent point
- */
- public long getSecondsBefore() {
- return _secondsBefore;
- }
-
- /**
- * @return the closest point after the media
- */
- public DataPoint getPointAfter() {
- return _pointAfter;
- }
-
- /**
- * @return number of seconds between previous point and media
- */
- public long getSecondsAfter() {
- return _secondsAfter;
- }
-
- /**
- * @return true if both points found
- */
- public boolean isValid() {
- return getPointBefore() != null && getPointAfter() != null;
- }
-
- /**
- * @return the fraction of the distance along the interpolated line
- */
- public double getFraction()
- {
- if (_secondsAfter == 0L) return 0.0;
- return (-_secondsBefore * 1.0 / (-_secondsBefore + _secondsAfter));
- }
-
- /**
- * @return the number of seconds to the nearest point
- */
- public long getMinSeconds() {
- return Math.min(_secondsAfter, -_secondsBefore);
- }
-
- /**
- * @return angle from media to nearest point in radians
- */
- public double getMinRadians()
- {
- double totalRadians = DataPoint.calculateRadiansBetween(_pointBefore, _pointAfter);
- double frac = getFraction();
- return totalRadians * Math.min(frac, 1-frac);
- }
-}