【问题标题】:How to find whether two line segment(not two straight lines) intersect如何查找两条线段(不是两条直线)是否相交
【发布时间】:2013-09-21 04:13:43
【问题描述】:

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

我在网上查了一下,但我只找到了找到两条线的交点的方法,而不是两条线段的交点。

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

【问题讨论】:

    标签: c algorithm computational-geometry xlib x11


    【解决方案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? 上的答案基本相似,除了从那里编码对于新手或匆忙的人来说不一定是微不足道的(就像我自己很多次一样)。

    【讨论】:

    • "如果 vp == 0 段是平行的并且没有交叉点"或者它们是平行的并且是同一条线的一部分。在第二种情况下,需要进行额外的测试以查看片段是否重叠。
    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 2011-10-25
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多