如何旋转矢量(向心力)?

时间:2014-01-27 10:49:56

标签: c# unity3d physics

我正在尝试用编程语言实现向心力。

我看到了一些教授这个理论的视频。但我不知道如何在编程语言中应用它。

如果我明白我必须向速度矢量应用向心力ac = v²/r。但我不确切知道如何继续。

我有两个游戏对象,一个描绘地球,另一个描绘月球。我想要的是将月球翻转到地球周围并使用一个按钮来“切割/取消”向心力,以便让月球离开地球的轨道。

我不知道如何开始。

我所知道的就是像这样旋转:

velocity.x = Mathf.Cos(Time.time) * earth_moon_radius;
velocity.z = Mathf.Sin(Time.time) * earth_moon_radius;
moon.transform.position = velocity;

但如何应用如上所述的向心力?

1 个答案:

答案 0 :(得分:1)

如果你只是想让月球围绕地球旋转而某些触发器释放月球,则更容易使用围绕中心旋转而不是力。给定以下GameObject层次结构:

中心(附MoonRotator
- 月亮
- 地球

public class MoonRotator : MonoBehaviour
{
    public bool cancelCentripetalForce = false;
    public Vector3 angularVelocity = new Vector3 (0f, 0f, 100f);

    public GameObject moon;

    void Update () {
        if (cancelCentripetalForce) {
            Vector3 radius = moon.transform.position - transform.position;
            Vector3 angularVelocityRadians = Mathf.Deg2Rad * angularVelocity;
            moon.rigidbody.velocity = Vector3.Cross (angularVelocityRadians, radius);
            moon.transform.parent = null;
            Destroy (this);
        } else {
            Vector3 rot = transform.rotation.eulerAngles + angularVelocity * Time.deltaTime;
            transform.rotation = Quaternion.Euler (rot);
        }
    }
}

如果设置了cancelCentripetalForce,则月亮停止在地球周围行进,但以其当前的切向速度继续行进。这是如下:
v =ω×r

地球localPosition(0,0,0), Moon 在此示例中位于围绕z轴旋转的xy平面中。