java - 将剩余距离推到碰撞平面?

标签 java math collision-detection trigonometry

好的,所以我有这个碰撞检测代码,我正在尝试将剩余距离(从 0 移动到 +5,墙在 +2,剩余 = +3)穿过墙的平面。像这样: enter image description here

现在我已经了解了大部分内容,我知道我需要移动的剩余距离,以及墙的法线的叉积,但我需要一些帮助来正确计算公式。

我的问题是,沿着墙的平面移动剩余距离的正确公式是什么?

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

这是一个垂直于 NAB 的 vector ,它们也位于墙的平面内。再取一个 vector Y 作为 XN

的 vector 积
    Y = X x N

这现在是墙上的另一个 vector ,它指向碰撞后粒子沿墙的运动方向。您需要规范化此 vector Y(计算 Y/|Y|)并将其乘以您想要沿墙移动的量,然后将其添加到您的碰撞中点 B。该 vector 可能会指向相反的方向,但如果您注意 vector 乘积的顺序,应该没问题。

这就是你如何在 3D 中做到这一点,我假设你想从你的问题中得到。在 2D 中,它会简单得多。

关于java - 将剩余距离推到碰撞平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196061/

相关文章:

javascript - 如何防止可拖动的子元素相互拖动?

java - JSP 表单正在选择 FireBug 中编辑的值

java - 从数组传递 o 对象中的参数

javascript - math.js 中的变量名和限制运算符

math - 为什么浮点运算在添加小数时不能给出准确的结果?

c - 平面中 2 个点的边界框

java - 寻找最近的点

java - 如何在 Blackberry 的 Canvas 上旋转带有文本的圆圈

C++ 二维多边形碰撞检测

swift - 多次检测到碰撞。