让我们考虑以下问题:
我们有一个4点的{a,b,c,d}
,我们想检查如果我们用纸上的线连接这两个点,[a;b]
和[c;d]
的方式是否会相互交叉。
该点被定义为(x|y)
,因此可以绘制到二维坐标系中。
如何在O(1)
中进行检查
发布于 2015-07-11 01:53:06
如果C点和D点相对于AB线位于不同的半平面内,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
https://stackoverflow.com/questions/31346374
复制相似问题