+++ /dev/null
-package tim.prune.correlate;
-
-import tim.prune.data.DataPoint;
-import tim.prune.data.Photo;
-
-/**
- * Class to hold a pair of points
- * used to hold the result of correlation of a photo
- */
-public class PointPair
-{
- private Photo _photo = null;
- private DataPoint _pointBefore = null;
- private DataPoint _pointAfter = null;
- private long _secondsBefore = 1L;
- private long _secondsAfter = -1L;
-
-
- /**
- * Constructor
- * @param inPhoto Photo object
- */
- public PointPair(Photo inPhoto)
- {
- _photo = inPhoto;
- }
-
-
- /**
- * 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 photo stamp
- if (inSeconds > _secondsBefore || _secondsBefore > 0L)
- {
- // point stamp is nearer to photo
- _pointBefore = inPoint;
- _secondsBefore = inSeconds;
- }
- }
- // Check if point is closest point after
- if (inSeconds >= 0)
- {
- // point stamp is after photo stamp
- if (inSeconds < _secondsAfter || _secondsAfter < 0L)
- {
- // point stamp is nearer to photo
- _pointAfter = inPoint;
- _secondsAfter = inSeconds;
- }
- }
- }
-
-
- /**
- * @return Photo object
- */
- public Photo getPhoto()
- {
- return _photo;
- }
-
- /**
- * @return the closest point before the photo
- */
- public DataPoint getPointBefore()
- {
- return _pointBefore;
- }
-
- /**
- * @return number of seconds between photo and subsequent point
- */
- public long getSecondsBefore()
- {
- return _secondsBefore;
- }
-
- /**
- * @return the closest point after the photo
- */
- public DataPoint getPointAfter()
- {
- return _pointAfter;
- }
-
- /**
- * @return number of seconds between previous point and photo
- */
- 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 photo to nearest point in radians
- */
- public double getMinRadians()
- {
- double totalRadians = DataPoint.calculateRadiansBetween(_pointBefore, _pointAfter);
- double frac = getFraction();
- return totalRadians * Math.min(frac, 1-frac);
- }
-}