package com.revolsys.geometry.test.old.perf.operation.distance; import com.revolsys.geometry.model.Geometry; import com.revolsys.geometry.model.Point; import com.revolsys.geometry.model.Polygon; import com.revolsys.geometry.model.impl.PointDoubleXY; import com.revolsys.geometry.model.util.SineStarFactory; import com.revolsys.geometry.util.GeometricShapeFactory; import com.revolsys.geometry.util.Stopwatch; public class TestPerfDistanceGeomPair { static final int MAX_ITER = 100; public static void main(final String[] args) { final TestPerfDistanceGeomPair test = new TestPerfDistanceGeomPair(); // test.test(); test.test2(); } double separationDist = this.size * 2; double size = 100; boolean testFailed = false; boolean verbose = true; public TestPerfDistanceGeomPair() { } void computeDistanceToAllPoints(final Geometry[] geom) { double dist = 0.0; final double dist2 = 0.0; for (final Point p : geom[1].vertices()) { // slow N^2 distance dist = geom[0].distancePoint(geom[1].getGeometryFactory().point(p)); // dist2 = fastDist.getDistance(geom[1].getFactory().createPoint(p)); // if (dist != dist2) System.out.println("distance discrepancy found!"); } } Geometry[] newCircles(final int nPts) { final GeometricShapeFactory gsf = new GeometricShapeFactory(); gsf.setCentre(new PointDoubleXY(0, 0)); gsf.setSize(100); gsf.setNumPoints(nPts); final Polygon gRect = gsf.newCircle(); gsf.setCentre(new PointDoubleXY(0, this.separationDist)); final Polygon gRect2 = gsf.newCircle(); return new Geometry[] { gRect, gRect2 }; } Geometry[] newSineStars(final int nPts) { final SineStarFactory gsf = new SineStarFactory(); gsf.setCentre(new PointDoubleXY(0, 0)); gsf.setSize(100); gsf.setNumPoints(nPts); final Geometry g = gsf.newSineStar().getBoundary(); gsf.setCentre(new PointDoubleXY(0, this.separationDist)); final Geometry g2 = gsf.newSineStar().getBoundary(); return new Geometry[] { g, g2 }; } public void test() { // test(5000); // test(8001); test(10); test(10); test(100); test(500); test(1000); test(5000); test(10000); test(50000); test(100000); } public void test(final Geometry[] geom) { final Stopwatch sw = new Stopwatch(); final double dist = 0.0; final double dist2 = 0.0; for (int i = 0; i < MAX_ITER; i++) { // dist = geom[0].distance(geom[1]); // dist = SortedBoundsFacetDistance.distance(g1, g2); // dist2 = BranchAndBoundFacetDistance.distance(geom[0], geom[1]); // if (dist != dist2) System.out.println("distance discrepancy found!"); computeDistanceToAllPoints(geom); } if (!this.verbose) { // System.out.println(sw.getTimeString()); } if (this.verbose) { // System.out.println("Finished in " + sw.getTimeString()); // System.out.println(" (Distance = " + dist + ")"); } } public void test(final int nPts) { // Geometry[] geom = newCircles(nPts); final Geometry[] geom = newSineStars(nPts); if (this.verbose) { // System.out.println("Running with " + nPts + " points"); } if (!this.verbose) { System.out.print(nPts + ": "); } test(geom); } public void test2() { this.verbose = false; for (int i = 100; i <= 2000; i += 100) { test(i); } } }