view flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/Utils.java @ 5627:2d9eb188fa51

Flys Issue 759 write longer strings and explicitly break the lines This makes the dem hover item layout more robust as it works with different string lengths
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 10 Apr 2013 10:25:33 +0200
parents b195fede1c3b
children
line wrap: on
line source
package de.intevation.flys.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);
    }
}

http://dive4elements.wald.intevation.org