1

我在游戏中进行碰撞检测。所有的表面都是正交的,所以我只需要确定我的移动物体与障碍物的哪个面相撞。我有一个矩形,它定义了两个对象的交点和表示移动对象速度和移动方向的向量。

我想我需要沿着我的移动对象矢量平移相交矩形,直到相交变成一条线,然后我就会知道哪个面与第一个相撞。

我不知道如何以数学方式或编程方式做到这一点 在此处输入图像描述

在此处输入图像描述

4

3 回答 3

3

计算从(对象内部障碍物的角)到(对象内部障碍物的角)的向量。无论您的运动矢量位于该矢量的哪个“边”,都会给出最先触及的“边”。如果它们的角度相同,则首先接触角。

例如,这里您的运动矢量大约是 260 度,然后计算出的矢量大约是 240 度。从计算到运动的逆时针方向是20度,顺时针方向是340度。因此,逆时针方向(底部)首先碰撞。

您需要能够分辨出哪两个方面有问题,哪个是“顺时针”和“逆时针” - 我希望这是微不足道的。

于 2012-11-15T13:29:52.113 回答
2

您可以将速度矢量的纵横比与相交矩形的纵横比进行比较。

对于这个特定的例子,如果速度矢量比相交矩形更陡(即定义了一个更高和更窄的矩形),那么碰撞发生在底面上。

如果速度矢量较浅,则碰撞发生在移动矩形的左侧。

如果速度矢量与相交矩形的纵横比相同(即速度位于相交矩形的对角线上),则它们在拐角处发生碰撞。

于 2012-11-15T13:45:22.330 回答
2

其实我可能已经想通了...

  • 在相交矩形上找到不在对象矩形上的点

  • 从那里沿向量方向画一条线

  • 它相交的任何一侧都是第一次碰撞的一侧
于 2012-11-15T13:45:44.590 回答