X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Ffunction%2Fcompress%2FClosePointsAlgorithm.java;fp=src%2Ftim%2Fprune%2Ffunction%2Fcompress%2FClosePointsAlgorithm.java;h=b48823840d7cfdca29075291bb4c91b83579e39b;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/function/compress/ClosePointsAlgorithm.java b/src/tim/prune/function/compress/ClosePointsAlgorithm.java new file mode 100644 index 0000000..b488238 --- /dev/null +++ b/src/tim/prune/function/compress/ClosePointsAlgorithm.java @@ -0,0 +1,107 @@ +package tim.prune.function.compress; + +import java.awt.Component; +import java.awt.event.ActionListener; + +import tim.prune.data.DataPoint; +import tim.prune.data.Track; + +/** + * Algorithm for detecting close points to compress + * Only checks distance to previous point, not any earlier point + */ +public class ClosePointsAlgorithm extends SingleParameterAlgorithm +{ + + /** + * Constructor + * @param inTrack track object + * @param inDetails track details object + * @param inListener listener to attach to activation control + */ + public ClosePointsAlgorithm(Track inTrack, TrackDetails inDetails, ActionListener inListener) + { + super(inTrack, inDetails, inListener); + } + + /** + * Perform the compression and work out which points should be deleted + * @param inFlags deletion flags from previous algorithms + * @return number of points deleted + */ + protected int compress(boolean[] inFlags) + { + // Parse parameter + double param = getParameter(); + // Use 1/x if x greater than 1 + if (param > 1.0) param = 1.0 / param; + if (param <= 0.0 || param >= 1.0) { + // Parameter isn't valid, don't delete any + return 0; + } + double threshold = _trackDetails.getTrackSpan() * param; + + // Loop over all points checking distances to previous point + // TODO: Maybe this should also check distance to _next_ point as well! + int numPoints = _track.getNumPoints(); + int prevPointIndex = 0; + int prevTrackPointIndex = 0; + double pointDist = 0.0; + int numDeleted = 0; + for (int i=1; i