我想检查一条线(或一条线的任何一点)是在一个矩形内还是与一个矩形相交。
我有(x0,y0)和(x1,y1)作为一行的起点和终点。 另外,(ax,ay)和(bx,by)作为矩形的左上角和右下角
例如,
____________
| |
---|----- | Result: true
| |
|____________|
/
_/__________
|/ |
/ | Result: true
/| |
|____________|
____________
| |
| -------- | Result: true
| |
|____________| ---------- Result: false
有人可以建议怎么做吗?我不想知道哪一点,我只是想知道它是否存在。
非常感谢您的帮助
答案 0 :(得分:5)
第一个和第三个案例是微不足道的 - 如果该行的任一端点在框内(即> ax和ay,< bx和by),则返回true。
第二个出现问题 - 我们不能再依赖于我们线路的端点了。在这种情况下,我们将不得不测试矩形的每个边缘的线。
我们的线的等式将是(x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0
,我们可以使用角来为矩形的每一边构造一个类似的等式。接下来,将矩形边的等式代入我们的直线将为我们提供交集。
最后,我们检查以确保该点位于矩形边的范围内,同样在我们正在考虑的线段内。
this discussion中有更详细的说明。