我想在shadertoy中實作一個重力系統而不使用任何存盤/緩沖區。所以我不能保存任何變數,我的影片必須是時間的函式。是否可以根據時間來計算行星的當前位置?!我很困惑,因為下一個位置取決于當前速度,而當前速度取決于前一個加速度,而這取決于前一個位置。它在理論上是否可以作為時間的函式來實作?更一般的一般問題是,這種半圓關系是否可以成為正則函式?
f(x)=? as simple form
該函式存在上述問題,因為 f(x) 取決于函式的前值。
請注意,行星并不位于圓形和穩定的軌道上。但他們有第一位置和速度。
uj5u.com熱心網友回復:
只有當你使用開普勒方程而不是重力模擬時,時間函式才是可能的......
只有當你有穩定的軌道并注意它與真實軌跡的近似值時,這才是可行的。
見相關:
- 是否有可能在大小和質量方面進行逼真的 n 體太陽系模擬?
您可以采用混合方法,將 Kepler 用于穩定軌道,一旦觸發互動(通過物體的近距離接觸),您將轉換回 Gravity 模型,計算互動結果并轉換回 Kepler(我假設 KSP 就是這樣做的)。
所以你應該有一個開普勒軌跡串列以及每個物體的持續時間,然后只使用正確的軌跡來查詢時間......
所以當把所有東西放在一起時,我會:
計算初始開普勒軌跡
所以計算單個軌道上的點并從中獲取軌道引數
計算近距離接觸
所以當物體彼此靠近時(類似于橢圓的交點)會看到類似(但更容易)的問題:
- 計算給定速度下軌道的截距。
這也可能對橢圓遭遇計算有很大幫助:
- 具有開始/結束角度問題的 OpenGL 橢圓
為每次遭遇重新計算重力模型并創建新的開普勒軌跡
將其添加到相遇時間后有效的身體軌跡串列...
如果在某個時間限制內遇到任何遇到 goto#2
現在,如果您想知道身體在時間上的位置,t只需查看它的開普勒軌跡串列,使用valid time >= t同時valid time也是最小的那個,然后計算您的位置、速度或任何您需要的...
uj5u.com熱心網友回復:
即使在二體問題(牛頓萬有引力)的情況下,也不能將行星的位置表示為簡單的時間分析函式,而需要求助于數值積分。
所以我看不出在更一般的情況下如何在不使用變數的情況下計算位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494240.html
上一篇:有沒有辦法傳遞一個需要args的函式,而不需要args并在以后添加它們?
下一篇:當我宣告變數全域并在另一個函式中使用它時,它顯示此錯誤NameError:name'img_file'isnotdefined
