2012-03-01 23 views
2

我正在寫一個基於物理學的遊戲,它具有行星與重力作用於各種物體如導彈。 (使用更先進的物理引擎)以不同的時間步長重現物理結果

對於主要的遊戲,我使用一個固定時間步的單一物理模擬。 這一切都很好,精美的作品。

這是問題所在。 我正在使用第二個物理模擬器以更大的時間步長爲了投射某些拋射路徑到未來。基本上是一個包含行星和其他靜態重力生成實體的平行宇宙 (因爲我正在實時運行這些投影模擬,所以它需要快速,因此需要更大的時間步長)。

它產生的結果稍有不同。

下面是每時步執行的基本代碼:

Vector2 force = GravityStrength/centerToCenterDist.LengthSquared()/Math.Sqrt(centerToCenterDist.LengthSquared()) * body1.Mass * body2.Mass * centerToCenterDist; 

//GravityStrength is in addition to the Mass calculations 

我的平行宇宙的時間步長是目前(5.0 *時間步長)。

我通過改變結果從而做出了嘗試,以修正結果不同:

force = (force * (timestep+1)) 

我的問題: 是否可以使用在不同的時間步複製在主仿真的結果並行模擬器?

我的數學不是很好,所以我很難考慮可能的解決方案。我猜這是不可能的,因爲涉及到非線性方程式。
如果是這樣,是否有相當準確的方法來獲得接近的結果?

回答

1

這是一個數學問題,而不是物理問題,但答案是否定的。模擬(任何模擬)都是近似值,並且將高度依賴於一些變量。

在這種情況下,它看起來像一個基本的Euler method模擬。你所看到的是兩種模擬的global truncation error的區別 - 換句話說,每個模擬都有內在的,不同的錯誤特徵。例如,在「接近方法」的情況下(當兩個物體明顯偏移時,錯誤會更大),你應該看到更多不同的模擬。您將無法糾正它,因爲校正比兩個模型的組合更復雜(即所需的計算能力)。

+0

我很害怕這個,謝謝! – 2012-03-01 03:20:16

相關問題