线矩形碰撞检测

时间:2010-03-03 01:27:06

标签: collision-detection

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

2 个答案:

答案 0 :(得分:6)

我看不出你如何用一个“焦点”来表示一个矩形。您需要两个角点或一个带有宽度/高度/旋转数据集的角点。

但是,一旦你拥有一个矩形,我只需将它分成四行,然后在这四行中的每一行和你要检查的行之间进行拦截检查。

在SO上搜索“线路交叉点”会出现很多问题,包括this one,这似乎很有希望。事实上,搜索“直线矩形交叉点”会为您提供this one,它似乎完全您所追求的。

答案 1 :(得分:2)

有很多关于交互形状的信息。 http://www.geometrictools.com/LibFoundation/Intersection/Intersection.html可能是一个很好的起点。实际上它包含用于线矩形交叉的C ++代码。它由Dave Eberly在计算机图形世界中广为人知。

说过如果我需要我自己的算法是这样的:

  1. 找到包含线段的线的方程式为x + b y - 1 = 0;
  2. 为矩形的每个顶点
  3. 评估f(x)= a x + b y - 1
  4. 如果所有角落都是> 0或全部是< 0你没有可能的交集。
  5. 交点只能出现在一个顶点具有f(x)> 0且另一个顶点具有f(x)<0的边缘上。因此,对所有此类边和原始线段执行线段到线段交叉。
  6. 这适用于任意多边形。所以旋转的矩形不会成为问题。

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