LinearInterpolation implements PositionInterpolator<T> { @Override public T interpolatePosition(final SortedSet<T> points) { final T result = pointFactory.newPoint(); if (points.size() > 0) { int weight = points.size(); final int normalizationFactor = (weight * (weight + 1)) / 2; float x = 0; float y = 0; for (NicGeoPoint point : points) { x += weight * point.getX(); y += weight * point.getY(); weight--; } x = x / normalizationFactor; y = y / normalizationFactor; result.setXY(x, y); } return result; } LinearInterpolation(final PointFactory<T> factory); @Override T interpolatePosition(final SortedSet<T> points);  }
@Test public void testEmptySet() { NicGeoPoint dstPoint = interpolator.interpolatePosition(distanceSet); assertEquals(0.0, dstPoint.getX()); assertEquals(0.0, dstPoint.getY()); }
@Test public void testSinglePoint() { p1.setDivergence(4.0f); distanceSet.add(p1); NicGeoPoint dstPoint = interpolator.interpolatePosition(distanceSet); assertEquals(p1.getX(), dstPoint.getX(), delta); assertEquals(p1.getY(), dstPoint.getY(), delta); }
@Test public void testTwoPoints() { p1.setDivergence(0.5f); p2.setDivergence(0.3f); distanceSet.add(p1); distanceSet.add(p2); NicGeoPoint dstPoint = interpolator.interpolatePosition(distanceSet); assertEquals(9f/3f, dstPoint.getX(), delta); assertEquals(7f/3f, dstPoint.getY(), delta); }
@Test public void testThreePoints() { p1.setDivergence(0.4f); p2.setDivergence(1.1f); p3.setDivergence(0.6f); distanceSet.add(p1); distanceSet.add(p2); distanceSet.add(p3); NicGeoPoint dstPoint = interpolator.interpolatePosition(distanceSet); assertEquals(11f/6f, dstPoint.getX(), delta); assertEquals(15f/6f, dstPoint.getY(), delta); }