Tworzę prosty symulator astronomiczny, który powinien wykorzystywać fizykę newtonowską do symulacji ruchu planet w układzie (lub dowolnych obiektach, jeśli o to chodzi). Wszystkie ciała są okręgami na płaszczyźnie euklidesowej, które mają takie właściwości, jak położenie, prędkość, masa, promień i wynikowa siła.
Chcę aktualizować wszechświat w krótkich odstępach czasu, zwykle kilka milisekund, ale nie jestem pewien, jak poprawnie obliczyć zmiany położenia.
Siła jest prosta fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2)
.
Ale jak mam dalej?
Mógłbym to zrobić:
a = Fr/body.m
v += a*dt
position += v*dt
Ale to oczywiście byłoby fałszywe. Może gdybym dodał 0,5 jako czynnik do obliczania pozycji?
time-integration
jcora
źródło
źródło
Odpowiedzi:
Zasadniczo masz odpowiedź - nie potrzebujesz współczynnika 0,5.
Zasadniczo masz dwuwymiarowy układ równań różniczkowych zwyczajnych pierwszego rzędu: gdzie wszystko jest funkcją czasu, z wyjątkiem przypuszczalniem, a kropki oznaczają pochodne czasu. Jeśli wykonasz proste różnicowanie pierwszego rzędu według esulera, znajdziesz x n + 1 -xn
źródło
0.5
czynnika? Wydaje się, że robi to samo, co rejestrowanie prędkościn-1/2dt
kilka sekund temu, co sugerujesz.