/*
* 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.math;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.util.Stopwatch;
/**
* Test performance of evaluating Triangle predicate computations
* using
* various extended precision APIs.
*
* @author Martin Davis
*
*/
public class InCirclePerf
{
public static void main(String[] args) throws Exception
{
InCirclePerf test = new InCirclePerf();
test.run();
}
public InCirclePerf() { }
Coordinate pa= new Coordinate(687958.05, 7460725.97);
Coordinate pb= new Coordinate(687957.43, 7460725.93);
Coordinate pc= new Coordinate(687957.58, 7460721);
Coordinate pp= new Coordinate(687958.13, 7460720.99);
public void run() {
System.out.println("InCircle perf");
int n = 1000000;
double doubleTime = runDouble(n);
double ddSelfTime = runDDSelf(n);
double ddSelf2Time = runDDSelf2(n);
double ddTime = runDD(n);
// double ddSelfTime = runDoubleDoubleSelf(10000000);
System.out.println("DD VS double performance factor = " + ddTime/doubleTime);
System.out.println("DDSelf VS double performance factor = " + ddSelfTime/doubleTime);
System.out.println("DDSelf2 VS double performance factor = " + ddSelf2Time/doubleTime);
}
public double runDouble(int nIter)
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < nIter; i++) {
TriPredicate.isInCircle(pa, pb, pc, pp);
}
sw.stop();
System.out.println("double: nIter = " + nIter
+ " time = " + sw.getTimeString());
return sw.getTime() / (double) nIter;
}
public double runDD(int nIter)
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < nIter; i++) {
TriPredicate.isInCircleDD(pa, pb, pc, pp);
}
sw.stop();
System.out.println("DD: nIter = " + nIter
+ " time = " + sw.getTimeString());
return sw.getTime() / (double) nIter;
}
public double runDDSelf(int nIter)
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < nIter; i++) {
TriPredicate.isInCircleDD2(pa, pb, pc, pp);
}
sw.stop();
System.out.println("DD-Self: nIter = " + nIter
+ " time = " + sw.getTimeString());
return sw.getTime() / (double) nIter;
}
public double runDDSelf2(int nIter)
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < nIter; i++) {
TriPredicate.isInCircleDD3(pa, pb, pc, pp);
}
sw.stop();
System.out.println("DD-Self2: nIter = " + nIter
+ " time = " + sw.getTimeString());
return sw.getTime() / (double) nIter;
}
}