Orbita di Keplero: ottenere la posizione sull'orbita nel tempo


8

Sto sviluppando un gioco di simulazione spaziale e sto riscontrando problemi nell'implementazione del movimento di stelle binarie, in questo modo:

Stella binaria

Le due stelle orbitano attorno al loro centroide e le loro traiettorie sono ellissi.

Fondamentalmente so come determinare la velocità angolare in qualsiasi posizione, ma non la velocità angolare nel tempo. Quindi, per un determinato angolo, posso calcolare molto facilmente la posizione delle stelle (cfr. Http://en.wikipedia.org/wiki/Orbit_equation ).

Vorrei ottenere la posizione delle stelle nel tempo. Le equazioni parametriche delle opere ellisse, ma non dà la velocità corretta: { X(t) = a×cos(t) ; Y(t) = b×sin(t) }.

È possibile e come si può fare?


Potrebbe essere fatto simulando la gravità che è abbastanza semplice (aggiungi una forza dipendente dalla massa * sqrt (distanza) e fai una fisica semplice)
Elva

7
No, non fare fisica semplice! Le orbite sono numericamente instabili e tutto imploderà o esploderà.
Jonas Bötel,

Risposte:



0

Sembra che tu abbia avuto abbastanza dati per produrre l'animazione a portata di mano sopra. La tua simulazione potrebbe richiedere più precisione di quella fornita dalla mia soluzione:

Per ogni fotogramma della tua animazione sopra, registra le posizioni dei pixel dei centri di ogni stella. Immettere questi valori in due array nel programma. Per un dato tempo t, trova le corrispondenti quattro voci consecutive in ciascun array ed esegui un filtro bicubico su di esse per produrre la posizione di ciascuna stella.


In realtà, l'animazione proviene da Wikipedia.
Artefatto2,

0

Ho trovato l'integrazione numerica per essere il modo più semplice. La legge del quadrato inverso (F = GM / r ^ 2) funziona abbastanza bene. E l'ordine Runge Kutta quattro spesso chiamato RK4 è facile da impiantare e funziona silenziosamente bene. Si inizia scrivendo un routien che richiede la derivata temporale del primo ordine, ad esempio per un singolo oggetto nello spazio 2D, si hanno coordinate X e Y e velocità X e Y. L'output è la derivata del tempo, la derivata del tempo della posizione è semplicemente velocità, quindi metà di essa è solo la copia di valori, quindi l'accelerazione è solo l'attrazione gravazionale. Quindi segui la prescrizione di Runge Kutta. L'errore di un singolo passaggio temporale è proporzionale al passaggio temporale alla quinta potenza. Regoli il passo temporale per rendere il risultato abbastanza accurato. Un vantaggio sull'integrazione numerica è se vuoi giocare con il sistema per renderlo più interessante,


Bene, sì, questa è una soluzione, ma il mio programma non è una simulazione fisica in tempo reale. È discreto e non posso aggiornare tutto ovunque. Questo è il motivo per cui la posizione in funzione del tempo è piacevole: non ha bisogno di calcoli, sempre esatti indipendentemente dalla frequenza con cui le posizioni vengono aggiornate.
Artefatto2,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.