2014-01-27 119 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平面。