我在游戏中进行碰撞检测。所有的表面都是正交的,所以我只需要确定我的移动物体与障碍物的哪个面相撞。我有一个矩形,它定义了两个对象的交点和表示移动对象速度和移动方向的向量。
我想我需要沿着我的移动对象矢量平移相交矩形,直到相交变成一条线,然后我就会知道哪个面与第一个相撞。
我不知道如何以数学方式或编程方式做到这一点
我在游戏中进行碰撞检测。所有的表面都是正交的,所以我只需要确定我的移动物体与障碍物的哪个面相撞。我有一个矩形,它定义了两个对象的交点和表示移动对象速度和移动方向的向量。
我想我需要沿着我的移动对象矢量平移相交矩形,直到相交变成一条线,然后我就会知道哪个面与第一个相撞。
我不知道如何以数学方式或编程方式做到这一点
计算从(对象内部障碍物的角)到(对象内部障碍物的角)的向量。无论您的运动矢量位于该矢量的哪个“边”,都会给出最先触及的“边”。如果它们的角度相同,则首先接触角。
例如,这里您的运动矢量大约是 260 度,然后计算出的矢量大约是 240 度。从计算到运动的逆时针方向是20度,顺时针方向是340度。因此,逆时针方向(底部)首先碰撞。
您需要能够分辨出哪两个方面有问题,哪个是“顺时针”和“逆时针” - 我希望这是微不足道的。
您可以将速度矢量的纵横比与相交矩形的纵横比进行比较。
对于这个特定的例子,如果速度矢量比相交矩形更陡(即定义了一个更高和更窄的矩形),那么碰撞发生在底面上。
如果速度矢量较浅,则碰撞发生在移动矩形的左侧。
如果速度矢量与相交矩形的纵横比相同(即速度位于相交矩形的对角线上),则它们在拐角处发生碰撞。
其实我可能已经想通了...
在相交矩形上找到不在对象矩形上的点
从那里沿向量方向画一条线