/** * Return the average distance from this {@link PolyLine}'s shape points to the other shape, and * the other shape's shape points to this polyline. * * @param other * The other shape to compare to * @return The two way cost distance to the other {@link PolyLine} */ public Distance averageDistanceTo(final PolyLine other) { return averageOneWayDistanceTo(other).add(other.averageOneWayDistanceTo(this)) .scaleBy(Ratio.HALF); }
private PolyLineRoute(final PolyLine source, final List<PolyLine> candidates, final List<Segment> candidateSegments) { this.candidateSegments = candidateSegments; this.source = source; this.candidates = candidates; this.cost = this.source.averageOneWayDistanceTo(this.asPolyLine()) .add(this.asPolyLine().size() > 2 ? new PolyLine(this.asPolyLine().innerLocations()) .averageOneWayDistanceTo(this.source) : Distance.ZERO); }
@Test public void testDistanceCost() { final PolyLine source = new PolyLine(Location.CROSSING_85_280, Location.TEST_2, Location.TEST_1); final PolyLine destination = new PolyLine(Location.CROSSING_85_280, Location.TEST_6, Location.TEST_1); final Distance distanceToOneWay = source.averageOneWayDistanceTo(destination); final Distance distanceFromOneWay = destination.averageOneWayDistanceTo(source); final Distance distanceTo = source.averageDistanceTo(destination); final Distance distanceFrom = destination.averageDistanceTo(source); logger.info("distanceToOneWay: {}", distanceToOneWay); logger.info("distanceFromOneWay: {}", distanceFromOneWay); logger.info("distanceTo: {}", distanceTo); logger.info("distanceFrom: {}", distanceFrom); Assert.assertEquals(distanceTo, distanceFrom); Assert.assertTrue( Location.TEST_2.distanceTo(Location.TEST_6).asMeters() / 3 > distanceTo.asMeters()); }