如何找到两个线段(不是两条直线)是否相交

时间:2013-09-21 04:13:44

标签: c algorithm computational-geometry xlib x11

我想找到一种方法来检查两个线段是否相交。我正在使用Xlib编程来实现它。

我在互联网上查了但是我只找到了找到两条线但不是两条线段交点的方法。

如何使用X lib编程实现这一点?

1 个答案:

答案 0 :(得分:1)

你不需要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)成为A1A2

之间的向量
  • vx = x2 - x1
  • vy = y2 - y1

计算

  • k1 = (vx * dy2 - vy * dx2) / vp
  • k2 = (vx * dy1 - vy * dx1) / vp

如果k1k2落在[0, 1]间隔之外,则这些线段不相交(但底层线相交)。否则,交叉点在

(x1 + k1 * dx1, y1 + k1 * dy1)

顺便说一下,如果你想知道对称性,那将与

相同

(x2 + k2 * dx2, y2 + k2 * dy2)

这些公式基本上类似于How do you detect where two line segments intersect?上的答案,除了那里的编码对于新手或匆忙中的某个人来说不一定是微不足道的(就像我自己多次一样)。