2D Planet Gravity


15

Sto cercando di creare un semplice gioco in cui viene lanciata un'astronave e quindi il suo percorso è influenzato dalla gravità dei pianeti.

Simile a questo gioco: http://sciencenetlinks.com/interactives/gravity.html

Vorrei sapere come replicare l'effetto che i pianeti hanno sull'astronave in questo gioco in modo che un'astronave possa "girare" attorno a un pianeta per cambiare direzione.

Sono riuscito a ottenere alcuni risultati fasulli in cui l'astronave si avvolge in un'enorme ellisse attorno al pianeta o è solo leggermente influenzata dalla gravità di un pianeta usando i vettori.

Grazie in anticipo.

ps Ho molta esperienza di programmazione, ma non ho nulla a che fare con gli sviluppatori di giochi.

Risposte:


15

Nel tuo caso c'è un'astronave, che si muove influenzata dalla gravità di tutti i pianeti. Ogni pianeta applica una forza pari a 'm1 * m2 / r ^ 2' in cui m1 e m2 rappresentano masse di astronave e pianeta, e r è uguale alla distanza euclidea del pianeta e della nave spaziale. devi solo calcolare la somma di tutte le forze applicate alla nave. dalle regole di Newton sappiamo 'f = m * a' dove f è la forza totale applicata a un oggetto, m è la sua massa e a è la sua accelerazione. da questo punto puoi leggere questa pagina per imparare come usare l'accelerazione per calcolare la velocità e la posizione nel tempo.


+1 Bella risorsa che hai collegato, che spiega il metodo di integrazione Runge-Kutta del 4 ° ordine e tutto il resto.
David Gouveia,

Il mio problema al momento è il percorso dell'astronave. Ho bisogno che sia più "simile al gioco". Ho fatto una semplice foto per mostrare cosa intendo. i44.tinypic.com/2w2kdo4.jpg A è quello che ho adesso, B è quello che voglio.
cotto il

@baked: e aumentare la massa del pianeta non funzionerebbe?
Jesse Emond,

5
Oltre all'articolo Gaffer on Games devi assolutamente leggere questo articolo di Codeflow ! Runge-Kutta non sembra la tua scommessa migliore qui.
Sam Hocevar,

Se hai A e vuoi B, che ne dici di ridurre la velocità iniziale della tua astronave?
Ben

4

Ogni pianeta dovrebbe avere un campo gravitazionale che tira qualsiasi oggetto nelle sue vicinanze verso il suo centro. In altre parole, dovresti applicare una forza dalla posizione dell'astronave al centro del pianeta ad ogni passo della simulazione.

Questa forza dipende dalla massa di entrambi gli oggetti, ma in questo caso, poiché la massa dell'astronave è probabilmente insignificante rispetto a quella del pianeta, puoi semplicemente provare diverse costanti a seconda delle dimensioni del pianeta fino a ottenere la sensazione giusta.

Ancora più importante, questa forza diventa più debole quanto maggiore è la distanza tra entrambi gli oggetti. Lo farai dividendo per la distanza quadrata tra entrambi. Dopo una certa distanza potresti voler tagliare "manualmente" e smettere di applicare la forza.

Basta tradurre questa forza in un'accelerazione e le equazioni fisiche di base dovrebbero occuparsi del resto.

In pseudocodice

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

Questo è in realtà abbastanza simile a come l'ho fatto attualmente. Forse è solo una questione di giocare con le costanti?
cotto il

2
Non sono sicuro, ma direi che probabilmente sta solo modificando ora. E penso che dipenda anche dalla forza iniziale che applichi all'astronave per metterla in orbita.
David Gouveia,
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.