Il nocciolo fisico della simulazione è molto semplice. Una volta assegnati i valori iniziali delle variabili t, vx, vy, x, y e portata la tartaruga nella posizione iniziale (con assegna posizione asPos) ecco il ciclo di ripetizioni necessario:
repeat
vy:=vy-9.8*dt;
x:=x+vx*dt;
y:=y+vy*dt;
aspos(x,y);
controlla;
t:=t+dt
until t>tmax ;
Durante il moto senza attrito la vx non varia e nemmeno l'accelerazione.
La procedura controlla dentro il ciclo si incarica di verificare se la tartaruga palla urta il "pavimento" o le "pareti" di una ipotetica stanza:
procedure controlla;
begin
if y<-300 then begin y:=-299; vy:=-vy*0.98
end;
if y>300 then begin y:=299; vy:=-vy*0.98 end;
if x<-400 then begin x:=-399; vx:=-vx*0.98
end;
if x>400 then begin x:=399; vx:=-vx*0.98 end;
end;
Se l'ordinata della palla è minire di -300 allora vuol dire che deve avvenire l'urto con il pavimento e quindi essa viene riportata un pochino più sopra a -299 ed inoltre la vy deve essere invertita (segno meno) ed anche un po' rimpicciolita (fattore ad esempio 0.98 dipendente dalla elasticità dell'urto su suggerimento del prof. Orazio Casella). Allo stesso modo per il "tetto" cioè y>300 e per le pareti a destra e a sinistra.
E' chiaro che i valori di x e y dipendono da come si disegna inizialmente la "stanza". Inoltre le variabili x, y, vx, vy debbono essere delle variabili globali valide in tutta la unit. Per ottenere ciò basta inserire la dichiarazione delle variabili (var <nomi>: <tipo> ;) prima delle procedure.
A questo punto è possibile visualizzare il risultato in modi diversi:
if (n mod 150 =0) then begin
pennagiu;
quadrato(10);
pennasu
end;
Ogni 150 iterazioni del ciclo principale, viene disegnato un quadrato di lato 10 e viene riportata "su" la penna della tartaruga.
Grazie alle possibilità offerte dal Delphi è possibile
che chi esegue il programma scelga il modo di visualizzazione con appositi
checkbox oltre alle velocità iniziali e al tempo della simulazione.
Listato
Volendo estendere la simulazione è particolarmente simpatico aggiungere un "vetro" contro cui la palla rimbalza. Il vetro non è altro che lasciare bianco un segmento delle pareti mentre esse vengono disegnate.
Più complessa è l'introduzione di una "buca" dentro cui la palla può cadere mettendo fine alla simulazione. Per fare questo è necessario un controllo delle coordinate più raffinato (nell'intervallo della buca, la palla non deve rimbalzare ma cadere) ed anche bisogna scrivere in modo adeguato il predicato che chiude il ciclo repeat ... until . Ad esempio.
until (t>tmax) or ((y<-300) and (x>-50) and (x<50)) ;
Dal punto di vista didattico è molto istruttivo per gli studenti controllare rigorosamente le coordinate e comprendere le operazioni logiche per ottenere di fermare la simulazione dopo la caduta nella buca della palla. E' faticoso scrivere, correggere e far girare il programma, ma alla fine la soddisfazione è notevole. Tutto questo attiene al programma di matematica.
Si può aprire una ulteriore finestra in un altro "form2" del Delphi per visualizzare il grafico della energie al variare del tempo (o dello spazio). Per i particolari relativi all'inserimento di un altro "form" vedi: più finestre
Dopo aver impostato form2.finestra(...) con gli stessi valori del form1.finestra (oppure form2.finestra2(...) con altri valori se si utilizza grafica2), ed eventualmente form2.assi, si può inserire nel ciclo repeat ... until precedente una riga di questo tipo:
form2.disegnaPunto(t,Ec, clred);
oppure
form2.disegnaPunto2(t,Ec, clred);
se si utilizza grafica2.
Si può così visualizzare l'effetto della perdita di energia cinetica dovuto agli urti.