【问题标题】:line-rectangle collision detection直线矩形碰撞检测
【发布时间】:2010-03-03 01:27:05
【问题描述】:

我有一条线(两点 (x,y) (x1,y1))和一个带焦点的矩形 (rx,ry)。我需要帮助找出直线和矩形之间的碰撞点,C++ 中的示例会有所帮助。

【问题讨论】:

  • 它是一个以(rx, ry)为中心的矩形
  • 宽度、高度或旋转呢?
  • @paxdiablo 该链接适用于以线的一个端点为中心的框。这个问题不是这样的

标签: collision-detection


【解决方案1】:

我不明白你怎么能用一个“焦点”来表示一个矩形。您将需要两个角点或一个具有宽度/高度/旋转数据集的角点。

但是,一旦您拥有一个矩形,我会简单地将其分解为四行,并在这四行中的每一行与您要检查的行之间进行截距检查。

在 SO 上搜索“线交叉点”会出现许多问题,包括 this one,这似乎很有希望。事实上,搜索“直线矩形交点”会给你this one,这似乎正是你所追求的。

【讨论】:

  • OP 可能还想检测线条完全包含在矩形内的情况,这需要单独检查。
【解决方案2】:

那里有很多关于交互形状的信息。 http://www.geometrictools.com/LibFoundation/Intersection/Intersection.html 可能是一个很好的起点。事实上,它包含用于直线-矩形相交的 C++ 代码。它的作者是在计算机图形界相当知名的 Dave Eberly。

话虽如此,如果我需要我自己的算法是这样的:

  1. 找到包含线段的直线方程 a x + b y - 1 = 0;
  2. 为矩形的每个顶点计算 f(x) = a x + b y - 1
  3. 如果所有角都 > 0 或所有角都
  4. 交点只能发生在一个顶点的 f(x)>0 和另一个顶点的 f(x)

这应该适用于任意多边形。所以旋转的矩形不会有问题。

如果您需要加快速度,您可以改进 3 中的拒绝标准,为线段和矩形使用轴对齐的边界矩形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多