0
我想找到一种方法来检查两条线段是否相交。我正在使用Xlib编程来实现此目的。如何查找两条线段(不是两条直线)是否相交
我在互联网上查过,但我只找到找到两条线的交点但不是两条线段的方法。
如何使用X lib编程来实现这一点?
我想找到一种方法来检查两条线段是否相交。我正在使用Xlib编程来实现此目的。如何查找两条线段(不是两条直线)是否相交
我在互联网上查过,但我只找到找到两条线的交点但不是两条线段的方法。
如何使用X lib编程来实现这一点?
你不需要这个Xlib。让两段是
A1 = (x1, y1)
- >B1 = (x1 + dx1, y1 + dy1)
和A2 = (x2, y2)
- >B2 = (x2 + dx2, y2 + dy2)
。让
vp = dx1 * dy2 - dx2 * dy1
如果vp == 0
段是平行的并且没有交集。
否则,设v = (vx, vy)
是载体A1
A2
之间和
vx = x2 - x1
vy = y2 - y1
计算
k1 = (vx * dy2 - vy * dx2)/vp
k2 = (vx * dy1 - vy * dx1)/vp
如果任或k2
落入[0, 1]
区间之外,这些段没有相交(但下层线做相交)。否则,该路口是
(x1 + k1 * dx1, y1 + k1 * dy1)
其中顺便说一句,如果你想知道的对称性,将是相同的点作为
(x2 + k2 * dx2, y2 + k2 * dy2)
这些公式基本相似,只是在How do you detect where two line segments intersect?答案从那里编码对于新手或者急于求助的人来说不一定是微不足道的(就像我曾经多次)。
“如果vp == 0这些段是平行的并且没有交集”或它们是平行的并且是同一行的一部分。在第二种情况下,需要额外的测试来确定这些段是否重叠。 – chux