/* * Copyright (c) 2016 Martin Davis. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * * http://www.eclipse.org/org/documents/edl-v10.php. */ package test.jts.perf.algorithm; import org.locationtech.jts.algorithm.MinimumBoundingCircle; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.util.Assert; public class MinimumBoundingCircleStressTest { GeometryFactory geomFact = new GeometryFactory(); public static void main(String args[]) { try { (new MinimumBoundingCircleStressTest()).run(); } catch (Exception ex) { ex.printStackTrace(); } } public MinimumBoundingCircleStressTest() { } void run() { while (true) { int n = (int) ( 10000 * Math.random()); run(n); } } void run(int nPts) { Coordinate[] randPts = createRandomPoints(nPts); Geometry mp = geomFact.createMultiPoint(randPts); MinimumBoundingCircle mbc = new MinimumBoundingCircle(mp); Coordinate centre = mbc.getCentre(); double radius = mbc.getRadius(); System.out.println("Testing " + nPts + " random points. Radius = " + radius); checkWithinCircle(randPts, centre, radius, 0.0001); } void checkWithinCircle(Coordinate[] pts, Coordinate centre, double radius, double tolerance) { for (int i = 0; i < pts.length; i++ ) { Coordinate p = pts[i]; double ptRadius = centre.distance(p); double error = ptRadius - radius; if (error > tolerance) { Assert.shouldNeverReachHere(); } } } Coordinate[] createRandomPoints(int n) { Coordinate[] pts = new Coordinate[n]; for(int i = 0; i < n; i++) { double x = 100 * Math.random(); double y = 100 * Math.random(); pts[i] = new Coordinate(x, y); } return pts; } }