如何检查点之间的连接是否相互交叉?

时间:2015-07-10 16:58:40

标签: graph geometry coordinates time-complexity

让我们考虑以下问题:

我们有4分{a,b,c,d},想要检查一下 如果我们连接,[a;b][c;d]会相互交叉 在纸上逐行分。

该点定义为(x|y),因此可以将其绘制为二维 坐标系。

如何在O(1)中查看?

1 个答案:

答案 0 :(得分:2)

有一种有效的方法来检查两个线段是否相交: 如果C和D点位于相对于AB线的不同半平面中,则AB和CD相交,并且C和D位于相对于CD线的不同半平面中。 Here is简洁的Python实现:

def ccw(A,B,C):
    return (C.y-A.y)*(B.x-A.x) > (B.y-A.y)*(C.x-A.x)

def intersect(A,B,C,D):
        return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D)

彻底治疗特殊情况(共线性,巧合)is described here