private static Point2D computePolylineCentroid(Polyline polyline) { double xSum = 0; double ySum = 0; double weightSum = 0; Point2D startPoint = new Point2D(); Point2D endPoint = new Point2D(); for (int i = 0; i < polyline.getPathCount(); i++) { polyline.getXY(polyline.getPathStart(i), startPoint); polyline.getXY(polyline.getPathEnd(i) - 1, endPoint); double dx = endPoint.x - startPoint.x; double dy = endPoint.y - startPoint.y; double length = sqrt(dx * dx + dy * dy); weightSum += length; xSum += (startPoint.x + endPoint.x) * length / 2; ySum += (startPoint.y + endPoint.y) * length / 2; } return new Point2D(xSum / weightSum, ySum / weightSum); }
private static Point2D computePolylineCentroid(Polyline polyline) { double xSum = 0; double ySum = 0; double weightSum = 0; Point2D startPoint = new Point2D(); Point2D endPoint = new Point2D(); for (int i = 0; i < polyline.getPathCount(); i++) { polyline.getXY(polyline.getPathStart(i), startPoint); polyline.getXY(polyline.getPathEnd(i) - 1, endPoint); double dx = endPoint.x - startPoint.x; double dy = endPoint.y - startPoint.y; double length = sqrt(dx * dx + dy * dy); weightSum += length; xSum += (startPoint.x + endPoint.x) * length / 2; ySum += (startPoint.y + endPoint.y) * length / 2; } return new Point2D(xSum / weightSum, ySum / weightSum); }
/** * Asserts that the given polyline contains the expected coordinate values. */ private static void assertPolylineEquals(final double[] trajectory, final Polyline polyline) { assertEquals("pointCount", trajectory.length / 2, polyline.getPointCount()); for (int i=0; i < trajectory.length;) { final Point2D xy = polyline.getXY(i / 2); assertEquals("x", trajectory[i++], xy.x, STRICT); assertEquals("y", trajectory[i++], xy.y, STRICT); } } }