2014-01-27 71 views
1

我正试图在编程语言中实现向心力。如何旋转矢量(向心力)?

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

如果我明白我必须将向心力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

为什么要旋转?不是力量的旋转产物?如果你想施加的力量,我会停止旋转,只保留位置矢量和方向矢量 - 每个步骤添加位置矢量多个方向矢量(取决于速度)并施加力量(添加多个中心方向矢量? )。它的产品应该和旋转一样。编辑:你想要施加的力量是什么对象? – wondra

+0

@wondra我可能搞砸了一切。你可以展示一些代码如何做到这一点? Im noob。我想把这支部队运用到月球上。它会围绕地球旋转。 – Fabricio

+1

你在月球和地球上尝试过老式的质量和重力吗? –

回答

1

如果你只是想让月球绕着地球旋转,并且有些触发器会释放月亮,那么使用围绕中心而不是力的旋转更容易。考虑下面的游戏对象层次结构:

中心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设置为true 月亮停止地球周围旅游但是以当前的切向速度继续进行。这由下式给出:
V =ω×R

地球具有localPosition(0,0,0)和月亮是在该示例中位于围绕z轴旋转所述x-y平面。