2011-01-28 86 views
9

我想检查一条线(或线的任意点)是否在矩形内或与矩形相交。如何检查一条线的任何点(或部分)是否在矩形内或触及矩形

我有(x0,y0)和(x1,y1)作为一条线的起点和终点。 另外,(AX,AY)和(BX,BY)为矩形

。例如左上角和右下角点,

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

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


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

任何人都可以建议如何做到这一点?我不想知道那是哪一点,我只是想知道它是否存在。

非常感谢帮助

+6

+1对于清晰的ASCII艺术:) – alex 2011-01-28 01:14:00

+0

一个快速谷歌“科恩萨瑟兰”应该让你开始正确的方向。 – 2011-01-28 01:17:53

回答

5

第一和第三种情况是微不足道的 - 简单地返回true,如果该线的终点是在箱体内(即> Ax和Ay,< BX和经过)。

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

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

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

this discussion中有更详细的说明。

相关问题