Re: Pianetini

From: Teti_s <"te..."_at_libero.it>
Date: Sun, 07 Jun 2009 16:14:40 GMT

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

This archive was generated by hypermail 2.3.0 : Thu Nov 21 2024 - 05:10:05 CET