确定两个球体的撞击时间

时间:2013-09-30 07:39:44

标签: c# unity3d collision-detection

我正在Unity中创建3D重力模拟。除碰撞响应外,我的一切工作正常。我想从确切的撞击点而不是当前时间步的时间进行碰撞解决计算。我环顾四周,我想我找到了正确的公式来确定碰撞的确切时间。但是,每当我尝试执行代码时,我都会收到NaN错误。我已经尝试了所有我能想到的解决问题的方法,但似乎没有什么可以解决这个错误。有人可以查看我的代码,看看你是否可以发现我可能错过的任何明显错误?

我遇到问题的方法是为了确定两个球体之间的确切冲击时间,我知道这两个球体在最后一个时间步长内发生碰撞。如果每个时间步长为1,则该方法意味着返回发生碰撞的0(当前时间步长)和1(前一个时间步长)之间的数字。

This is the formula I am using

Vector3 velocity2MinusVelocity1 = particle2.GetComponent<Particle>().Velocity - particle1.GetComponent<Particle>().Velocity;
        Vector3 separationVector = particle1.transform.position - particle2.transform.position;

        return ((-(Vector3.Dot(separationVector, velocity2MinusVelocity1)
                / (Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2))))
                -
                (Mathf.Sqrt(
                    Mathf.Pow(
                        Vector3.Dot(separationVector, velocity2MinusVelocity1) 
                        / Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2)
                        , 2)
                    - 
                        Mathf.Pow(Vector3.Magnitude(separationVector), 2) 
                            - Mathf.Pow(particle1.GetComponent<Particle>().Radius 
                                + particle2.GetComponent<Particle>().Radius
                            ,2)
                        / Mathf.Pow(Vector3.Magnitude(velocity2MinusVelocity1), 2)
                )));

如果结构有点难以理解,我道歉。我试图让它尽可能容易阅读

0 个答案:

没有答案