""" Simulazione dei rimbalzi di una palla dentro una stanza Calcolo ricorrente per calcolare la posizione e la velocita' Rappresentazione grafica delle energie potenziale e cinetica in una finestra a parte Ad ogni rimbalzo, la palla perde il 5 % della velocita' """ from graphics import * from graftarta2 import Graf def perimetro(fin): Line(Point(-300,-150), Point(300,-150)).draw(fin) Line(Point(300,-150), Point(300,150)).draw(fin) Line(Point(300,+150), Point(-300,150)).draw(fin) Line(Point(-300,150), Point(-300,-150)).draw(fin) def vai(vx,vy,fin,fin2): x = 0.0 # m y = 0.0 # m m=0.02 #massa kg dt = 0.005 # s t = 0 # s n=0 #fin.pennasu() while t<20: vy=vy-9.8*dt #velocita' m/s x=x+vx*100*dt y=y+vy*100*dt Ec=0.5*m*(vx*vx+vy*vy) # Energia cinetica J Ep=m*9.8*abs(y/100.0+1.5) # Energia potenziale J fin.asPos(x,y) fin2.plot(t,Ec,"red") fin2.plot(t,Ep,"green") fin2.plot(t,Ec+Ep,"black") #print Ec, Ep if y<-150: y=-149 vy=-vy*0.95 if y>150: y=149 vy=-vy*0.95 if x<-300: x=-299 vx=-vx*0.95 if x>300: x=299 vx=-vx*0.95 #if n % 8==0: # c=Circle(Point(x,y),2) # c.draw(fin) n=n+1 t = t+dt if __name__=="__main__": fin=Graf("tarta che rimbalza",300,200) fin.coordinate(-350,-200,350,200) fin.nascondi_tarta() fin.mostra_palla() perimetro(fin) fin2=Graf("tempo (s), energie (J)",600,200) fin2.coordinate(-2,-0.1,18,0.4,True) fin.getMouse() vai(1.5,1,fin, fin2)