Re: Simulatore - Gestione collisioni

From: Giorgio Bibbiani <giorgio_bibbianiTOGLI_at_virgilio.it>
Date: Thu, 30 Dec 2004 15:05:03 GMT

Danguard wrote:
[cut]
> > una collisione potrebbe essere invece provocata con una scelta
> > ad hoc delle condizioni iniziali, come nel caso di due pianeti isolati
> > e inizialmente a riposo, che vengono inesorabilmente attratti l'uno
> > verso l'altro fino a collidere.
>
> E in questo caso come gestisco la collissione?

Veramente io cercherei di evitarle del tutto, le collisioni, quindi
si cambiano le condizioni iniziali :-)

> ....un'idea che mi e' venuta e' quella di ipotizzare che i pianeti si
> "fondano", cioe' ai due pianeti P1 e P2 sostituisco un unico P3 di massa
> data dalla somma delle masse dei due, e la velocita' data dalla media
> delle velocita' dei due pianeti, pesata con le loro masse.
> Questa mia idea e' giusta o e' una "balla", nel senso che non ha
> fondamento fisico?
> Come faccio in questi casi? Ci sono regole o equazioni particolari per
> gestire le collisioni??

Dipende dallo scopo della simulazione.
Se schematizzi i pianeti come punti materiali, e' perche'
hai deciso di studiare la dinamica Newtoniana di
un sistema a N corpi interagenti per attrazione gravitazionale
trascurando la possibilita' di collisioni, se invece ti interessi alle
collisioni allora dovrai necessariamente assegnare ai pianeti
dei raggi finiti, e si avra' una collisione nel caso in cui la distanza
tra i centri di due pianeti sia uguale o minore alla somma dei
loro raggi.
La tua idea e' valida nel caso che l'urto tra i pianeti sia totalmente
anelastico, ma non e' detto che sia sempre cosi', ad esempio i pianeti
potrebbero frantumarsi nell'urto, dipende dalla loro velocita' relativa,
struttura, momento angolare, quindi non si puo' dare una regola
che valga sempre.
Io non mi preoccuperei piu' di tanto della eventualita' di collisioni,
visto che consideri i pianeti come punti materiali, prova a fare
il conto del numero possibile delle terne di coordinate che corrispondono
alla posizione di un pianeta nella regione di spazio in cui avviene il moto
(questo numero dipende dal tipo di dati numerici che descrivono le
coordinate nella tua simulazione), e vedrai che la probabilita' che
due pianeti occupino casualmente una stessa posizione e' ridicolmente
bassa (sempreche' naturalmente tu non "bari" nella scelta delle
condizioni iniziali).

> > Un problema sostanziale nasce invece quando la distanza tra
> > due pianeti e' sufficientemente piccola perche' la forza di
> > attrazione gravitazionale diventi tanto grande da causare un
> > errore inaccettabile nel procedimento di calcolo numerico iterativo,
>
> Mi potresti dare dei valori numerici, perche' "sufficientemente
> piccola" non so come tradurlo in codice... :(

Non so quale algoritmo tu abbia usato nella simulazione
supponiamo per semplicita' che tu abbia proceduto cosi'
(nel seguito le grandezze forza, posizione, velocita' e
accelerazione si intendono vettoriali, Dt e' l'intervallo
di tempo che separa due iterazioni successive):

1) date le posizioni degli N corpi al tempo t, in base alla
legge di attrazione gravitazionale calcoli le forze tra
i corpi interagenti e le corrispondenti accelerazioni.
2) date le posizioni e velocita' degli N corpi al tempo t, calcoli
le posizioni e le velocita' al tempo t + Dt supponendo che le
accelerazioni siano costanti nell'intervallo di tempo di durata Dt.
3) ritorni al punto 1) con i nuovi valori di posizione e velocita'.

E' chiaro che la precisione dell'algoritmo di calcolo e' condizionata
dalla scelta di Dt, e che (almeno in linea di principio) al diminuire
di Dt aumenta la precisione del calcolo, ma non si puo' neanche
diminuire a piacere il valore di Dt perche' altrimenti il computer
"si siede", quindi la scelta di Dt e' frutto di un compromesso
tra precisione e velocita' di calcolo.
Un modo indiretto per confermare l'esattezza del calcolo e'
verificare la conservazione dei cosiddetti integrali del moto
(in questo caso energia meccanica e momento angolare), ad
es. potresti calcolare periodicamente l'energia totale e controllare
che non si discosti "troppo" dal valore iniziale (nota le virgolette,
non so quantificare il valore di "troppo", e' una scelta arbitraria).
Il problema e' che per ogni valore di Dt esistono
configurazioni del sistema a N corpi per cui la precisione
del calcolo diventa inaccettabilmente scarsa, in particolare
cio' accade quando due corpi eseguono passaggi ravvicinati
tra loro e la forza di attrazione gravitazionale e' di conseguenza
"grande" (se visualizzi le posizioni dei pianeti sullo schermo
grafico puo' capitarti di osservare che dopo un incontro
ravvicinato uno dei corpi "schizza via" a velocita' quasi
relativistica:-), chiaramente la causa e' il valore eccessivo di Dt).
Una soluzione potrebbe essere una gestione dinamica di Dt,
ad es. confrontando i valori delle velocita' prima e dopo il passo 2)
dell'algoritmo precedente e nel caso che la variazione relativa di
velocita' sia "eccessiva" (ancora non so quantificare...), ripetere
il passo 2) con un valore ridotto di Dt, oppure nel caso che la
variazione di velocita' sia "troppo" piccola, ripetere il passo 2)
con un valore incrementato di Dt.
Naturalmente se scegli di variare il valore di Dt dovrai tenere
presente questo fatto nella rappresentazione a schermo del
moto dei corpi (risulterebbe non realistica per quanto riguarda
la velocita' apparente dei pianeti, aggiornando lo schermo ad
ogni iterazione del calcolo).

> Devo porre un limite tipo 1.0E-5[metri] ?

Non si puo' scegliere un limite a priori, il valore della distanza
tra due pianeti per cui la simulazione diventa inattendibile dipende
dalla scelta dell'intervallo di tempo, dalle masse e velocita' dei pianeti.

> E la costante G0 [di gravita'] devo porla uguale al suo valore S.I.?
> O e' meglio usare altre scale?

Potresti anche usare unita' per cui si abbia G = 1 in modo da
eliminarla dalle equazioni del moto, ti consiglio pero' di usare
unita' SI in questo primo programma, ti semplifichi la vita
perche' eviti di fare conversioni per riportare i risultati finali
in unita' SI, e faciliti il debugging (i numeri che ottieni sono
piu' "leggibili", cioe' vedi piu' facilmente se hanno senso o no).
Ciao
--
Giorgio Bibbiani
Received on Thu Dec 30 2004 - 16:05:03 CET

This archive was generated by hypermail 2.3.0 : Fri Nov 08 2024 - 05:10:22 CET