【问题标题】:How to check if any point (or part) of a line is inside or touches a rectangle如何检查线的任何点(或部分)是否在矩形内部或接触矩形
【发布时间】:2012-10-22 06:41:54
【问题描述】:

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

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

例如,

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

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


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

谁能建议如何做到这一点?我不想知道那是哪一点,我只想知道它是否在那里。

非常感谢您的帮助

【问题讨论】:

  • +1 表示清晰的 ASCII 艺术 :)
  • 快速谷歌搜索“Cohen Sutherland”应该会让您朝着正确的方向开始。
  • 将每条边视为自己的线段。然后只需确定线段交点和完全包含在其中的情况。当然,这只是一个快速观察,可能不是解决此类交叉点的理想方法(这也是一个非常常见的交叉点——如果这是一个原始问题,我会感到非常惊讶; -)

标签: math line


【解决方案1】:

第一种和第三种情况很简单 - 如果线的任一端点在框内(即 > ax 和 ay,

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

我们的直线方程是(x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0,我们可以使用角为矩形的每一边构造一个类似的方程。之后,将矩形边的方程代入我们的直线将得到交点。

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

this discussion 对此有更详细的说明。

【讨论】:

  • 2) 对我来说似乎不对。以单位正方形(0,0到1,1)与段(-1,0)-(1,3)的情况为例。
  • 你是对的!那会产生误报。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 2019-05-26
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2015-02-05
  • 2012-08-22
  • 2023-03-04
相关资源
最近更新 更多