我需要实现一个名为disjoint segments的方法,如果线段是disjointsegments,则返回true,否则返回false。
这就是我现在所拥有的。应该有两个片段,ab和cd。

public static boolean disjointSegments(Point2D.Double a, Point2D.Double b,
        Point2D.Double c, Point2D.Double d)

这是一个赋值,它说我可以用delta方法来计算,delta方法是一种计算矩阵行列式的方法。
我已经实现了delta方法。
public static double delta(Point2D.Double a, Point2D.Double b,
        Point2D.Double c) {
    return (a.getX() * b.getY() * 1) + ( a.getY() * 1 * c.getX()) + (1 * b.getX() * c.getY()) - (1 * b.getY() * c.getX())
            - (a.getX() * 1 * c.getY()) - (a.getX() * b.getY() * 1);
}

那么,我如何判断线段是否不相交呢?

最佳答案

这是一般案件的解决办法特殊情况见this-page 9

public static int orientation(Point p, Point q, Point r) {
    double val = (q.getY() - p.getY()) * (r.getX() - q.getX())
            - (q.getX() - p.getX()) * (r.getY() - q.getY());

    if (val == 0.0)
        return 0; // colinear
    return (val > 0) ? 1 : 2; // clock or counterclock wise
}

public static boolean intersect(Point p1, Point q1, Point p2, Point q2) {

    int o1 = orientation(p1, q1, p2);
    int o2 = orientation(p1, q1, q2);
    int o3 = orientation(p2, q2, p1);
    int o4 = orientation(p2, q2, q1);

    if (o1 != o2 && o3 != o4)
        return true;

    return false;
}

public static void main(String[] args) {
    Point p1 = new Point(1,1);
    Point q1 = new Point(2,0);
    Point p2 = new Point(1,0);
    Point q2 = new Point(3,2);
    System.out.println("intersect: "+intersect(p1, q1, p2, q2));
}

回答:
相交:真

关于java - 如何找到两个线段是否在Java中相交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25830932/

10-12 06:46