首先,我對java很陌生,道歉。我試圖模擬地球繞太陽轉。在繪製結果之後,它看起來地球在一次旋轉之後螺旋離開軌道!地球在java模擬中走出軌道
我檢查並重新檢查常量,如太陽和地球的質量以及初始速度和位置。我不確定我要出錯的地方,同事和講師也正確地確認了方程式。
代碼由4個類組成:
找到。
首先,我對java很陌生,道歉。我試圖模擬地球繞太陽轉。在繪製結果之後,它看起來地球在一次旋轉之後螺旋離開軌道!地球在java模擬中走出軌道
我檢查並重新檢查常量,如太陽和地球的質量以及初始速度和位置。我不確定我要出錯的地方,同事和講師也正確地確認了方程式。
代碼由4個類組成:
找到。
壞:
y += yVelocity * timeStep;
x += xVelocity * timeStep;
當你正在使用離散時間步長,你不僅要速度添加到您的位置,而且還加速將對在此期間,你的速度的影響。
更好:
yAccel = Sun.componentY();
xAccel = Sun.componentX();
y += (yVelocity + yAccel * timeStep * 0.5) * timeStep;
x += (xVelocity + xAccel * timeStep * 0.5) * timeStep;
yVelocity += yAccel * timeStep;
xVelocity += xAccel * timeStep;
這是假設加速整個時間步長,這在現實中是不持續時間保持不變。不過,它應該更接近你想達到的目標。
最佳:
使用積分,你應該能夠完全模擬真實的行爲(忽略浮點問題)。
加速度,速度和位置都可以使用積分來表示,那麼您應該能夠解決t到t + dt的每幀模擬範圍。我發現Mathematica的試用許可可以在這種情況下非常有用。
謝謝,。我剛剛嘗試過這種方式,但它的確如此接近,但地球仍然退出軌道。你的意思是y + =(yVelocity +(yAccel * timestep * 0.5))* timestep? – IamThankful
是的,這就是我的意思。但應該來到同一件事情。 –
這種計算方法假定在時間步長期間加速度保持不變,實際上,加速度沒有。因此結果不能準確,但會以較小的時間步長變好。你可以嘗試在時間步中模擬加速度變化,這會讓你更加接近,但它不會是完美的。 –
最後一類是矢量類我確定這裏沒有錯誤。 – IamThankful
問問你自己,每當你做'時間步'或每次模擬接近數值計算時會發生什麼。 – pvg
您正在使用離散步驟估計未來位置,並且在數學上,當您需要更高階逼近(泰勒或MacLaurin系列)時,您可以使用一階近似來執行此操作。但我不確定在代碼中執行此操作的最有效方法。 –