如何检查线的任何点(或部分)是否在内部或触摸矩形

时间:2011-01-28 01:07:40

标签: math line

我想检查一条线(或一条线的任何一点)是在一个矩形内还是与一个矩形相交。

我有(x0,y0)和(x1,y1)作为一行的起点和终点。 另外,(ax,ay)和(bx,by)作为矩形的左上角和右下角

例如,

     ____________
    |            |
 ---|-----       |    Result: true
    |            |
    |____________|

    /
  _/__________
 |/           |
 /            |      Result: true
/|            |
 |____________|


     ____________
    |            |
    |   -------- |   Result: true
    |            |
    |____________|    ----------     Result: false

有人可以建议怎么做吗?我不想知道哪一点,我只是想知道它是否存在。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:5)

第一个和第三个案例是微不足道的 - 如果该行的任一端点在框内(即> ax和ay,< bx和by),则返回true。

第二个出现问题 - 我们不能再依赖于我们线路的端点了。在这种情况下,我们将不得不测试矩形的每个边缘的线。

我们的线的等式将是(x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0,我们可以使用角来为矩形的每一边构造一个类似的等式。接下来,将矩形边的等式代入我们的直线将为我们提供交集。

最后,我们检查以确保该点位于矩形边的范围内,同样在我们正在考虑的线段内。

this discussion中有更详细的说明。