Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/math/Utils.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/Utils.java@b195fede1c3b |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/math/Utils.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,61 @@ +package org.dive4elements.river.artifacts.math; + + +public final class Utils { + + public static final double EPSILON = 1e-3; + + private Utils() { + } + + public static final boolean epsilonEquals(double a, double b) { + return epsilonEquals(a, b, EPSILON); + } + + public static final boolean epsilonEquals(double a, double b, double eps) { + return Math.abs(a - b) < eps; + } + + public static int relativeCCW( + double x1, double y1, + double x2, double y2, + double px, double py + ) { + if ((epsilonEquals(x1, x2) && epsilonEquals(y1, y2)) + || ((epsilonEquals(x1, px) && epsilonEquals(y1, py)))) { + return 0; // Coincident points. + } + // Translate to the origin. + x2 -= x1; + y2 -= y1; + px -= x1; + py -= y1; + double slope2 = y2 / x2; + double slopep = py / px; + if (epsilonEquals(slope2, slopep) + || (epsilonEquals(x2, 0.0) && epsilonEquals(px, 0.0))) { + return y2 > EPSILON // Colinear. + ? (py < -EPSILON ? -1 : py > y2 ? 1 : 0) + : (py > -EPSILON ? -1 : py < y2 ? 1 : 0); + } + if (x2 >= EPSILON && slope2 >= EPSILON) { + return px >= EPSILON // Quadrant 1. + ? (slope2 > slopep ? 1 : -1) + : (slope2 < slopep ? 1 : -1); + } + + if (y2 > EPSILON) { + return px < -EPSILON // Quadrant 2. + ? (slope2 > slopep ? 1 : -1) + : (slope2 < slopep ? 1 : -1); + } + if (slope2 >= EPSILON) { + return px >= EPSILON // Quadrant 3. + ? (slope2 < slopep ? 1 : -1) + : (slope2 > slopep ? 1 : -1); + } + return px < -EPSILON // Quadrant 4. + ? (slope2 < slopep ? 1 : -1) + : (slope2 > slopep ? 1 : -1); + } +}