好的,所以我有这个碰撞检测代码,我正在尝试将剩余距离(从 0 移动到 +5,墙在 +2,剩余 = +3)穿过墙的平面。像这样:
现在我已经了解了大部分内容,我知道我需要移动的剩余距离,以及墙的法线的叉积,但我需要一些帮助来正确计算公式。
我的问题是,沿着墙的平面移动剩余距离的正确公式是什么?
if(distRemaining.length() > 0){
cProduct = cross(distRemaining, wallNormal);
dest += new Vector3f(cProduct.x, 0, cProduct.z);
}
最佳答案
将起点 A
和冲击点 B
以及壁面的法 vector N
命名。计算从 A 到 B 的 vector (AB
),并计算它与 N
的 vector 积。称之为 X
X = AB x N
这是一个垂直于 N
和 AB
的 vector ,它们也位于墙的平面内。再取一个 vector Y 作为 X
和 N
Y = X x N
这现在是墙上的另一个 vector ,它指向碰撞后粒子沿墙的运动方向。您需要规范化此 vector Y
(计算 Y/|Y|
)并将其乘以您想要沿墙移动的量,然后将其添加到您的碰撞中点 B
。该 vector 可能会指向相反的方向,但如果您注意 vector 乘积的顺序,应该没问题。
这就是你如何在 3D 中做到这一点,我假设你想从你的问题中得到。在 2D 中,它会简单得多。
关于java - 将剩余距离推到碰撞平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196061/