Il 06 Giu 2009, 20:51, Soviet_Mario <Soviet_at_MIR.CCCP> ha scritto:
> Teti_s ha scritto:
>
> � una cosa che scrivi per finalit� commerciali e/o di
> pubblicazione, o per mero piacere personale ?
Per smodata curiosit� :-)
> Nel caso, ammettendo che non ti vada di distribuire n�
> sorgenti n� eseguibili, potresti considerare di magari
> catturare qualche filmato delle animazioni ?
Non ci sono problemi ad isolare gli algoritmi in algoritimichese, non penso
che il sorgente giovi pi� di tanto dato che � un Visul Basis e di questo
linguaggio io quasi mi vergogno. Il motore � essenzialmente il seguente:
For i As Short = 1 To N
'calcola l'accelerazione del pianeta i
'inizializza la sommatoria
ax0(i) = 0
ay0(i) = 0
'aggiunge i contributi dal pianeta j se questo non � il pianeta stesso
For j As Short = 1 To N
If j <> i Then
ax0(i) = ax0(i) - M(j) * (X(i) - X(j)) / (((X(i) - X(j)) ^ 2 + (Y(i) - Y(j))
^ 2) ^ (3 / 2))
ay0(i) = ay0(i) - M(j) * (Y(i) - Y(j)) / (((X(i) - X(j)) ^ 2 + (Y(i) - Y(j))
^ 2) ^ (3 / 2))
End If
Next
Next
'aggiorna le posizioni dopo averle registrate e deposita le nuove in
variabili intere per il disegno
For i As Short = 1 To N
xold(i) = X(i)
yold(i) = Y(i)
X(i) = X(i) + Vx(i) * t + (1 / 2) * ax0(i) * t ^ 2
Y(i) = Y(i) + Vy(i) * t + (1 / 2) * ay0(i) * t ^ 2
xnew(i) = X(i)
ynew(i) = Y(i)
Next
'aggiorna le velocit�
For i As Short = 1 To N
'calcola le nuove accelerazioni del pianeta i
'inizializza la sommatoria delle "accelerazioni" che agiscono sul pianeta i
ax1(i) = 0
ay1(i) = 0
'somma al valore iniziale il contributo del pianeta j se questo non � i
For j As Short = 1 To N
If j <> i Then
ax1(i) = ax1(i) - M(j) * (X(i) - X(j)) / (((X(i) - X(j)) ^ 2 + (Y(i) - Y(j))
^ 2) ^ (3 / 2))
ay1(i) = ay1(i) - M(j) * (Y(i) - Y(j)) / (((X(i) - X(j)) ^ 2 + (Y(i) - Y(j))
^ 2) ^ (3 / 2))
End If
Next
'aggiorna le velocit�
Vx(i) = Vx(i) + t * (ax1(i) + ax0(i)) / 2
Vy(i) = Vy(i) + t * (ay1(i) + ay0(i)) / 2
Next
xold,yold,xnew,ynew ti servono per tracciare il segmento.
Puoi utilizzare il t che preferisci, per i casi che ti dicevo ho usato t =
0.1 Ho comunque appena fatto un test con t = 0,2 ed ho scoperto, grazie al
maggior tempo di simulazione che la storia che ho raccontato aveva un
seguito: i due pianeti lontani tornano e dopo si allontanano ancora
lasciando quelli che rimangono su orbite pi� larghe che dopo pochi giri
comportano una collisione ed i due pianetini che schizzano in direzioni
opposte. Questo esito, comunque � causato, senza ombra di dubbio dal tempo t
= 0,2 infatti ho ripetuto l'esperimento aspettando, un poco pi� di tempo,
per il caso t = 0,05 e quello che si vede � che stavolta i pianetini
rimangono alla stessa distanza reciproca, ma la direzione orbitale cambia un
poco, come la direzione di allontanamento dei pianeti, che tornano ancora,
al secondo ritorno tuttavia, anche con t = 0,05 si verifica l'esplosione, ma
penso che anche in questo caso posa essere un artefatto numerico.
> Le traiettorie che descrivi mi incuriosiscono fortemente,
> sembrano molto affascinanti ...
>
> Solo se hai tempo ovviamente
Volentieri, ma come faccio ad estrarre un'animazione? Vedo se posso trovare
un modo, un'alternativa sarebbe di tradurre il tutto in un applet java, se
non ce ne sono di migliori gi� pronti all'uso.
> Ciao
> Soviet
> CUT ALL
>
--------------------------------
Inviato via
http://arianna.libero.it/usenet/
Received on Sun Jun 07 2009 - 18:14:40 CEST