12/04/12 20:12
Il_Bomba
Ciao a tutti, sto scrivendo un programma che calcola in continuazione la posizione di due sfere e le mostra con la posizione aggiornata ogni secondo.
Il punto è che durante l'esecuzione del programma, lo script termina con il seguente messaggio di errore:
Traceback (most recent call last):
File "prova.py", line 44, in <module>
forza_gravitazionale()
File "prova.py", line 6, in forza_gravitazionale
f=6.67*pow(10,-11)*((obj1.massa*obj2.massa)/(((obj1.pos[0]-obj2.pos[0])**2)+
((obj1.pos[1]-obj2.pos[1])**2)))
ZeroDivisionError: float division by zero
Ora, ho capito che il problema sta nel fatto che, ad un certo punto, il divisore dell'espressione a riga 6 si trova con valore 0, ma non capisco come mai.
Non so più dove sbattere la testa
Il programma:
Il punto è che durante l'esecuzione del programma, lo script termina con il seguente messaggio di errore:
Traceback (most recent call last):
File "prova.py", line 44, in <module>
forza_gravitazionale()
File "prova.py", line 6, in forza_gravitazionale
f=6.67*pow(10,-11)*((obj1.massa*obj2.massa)/(((obj1.pos[0]-obj2.pos[0])**2)+
((obj1.pos[1]-obj2.pos[1])**2)))
ZeroDivisionError: float division by zero
Ora, ho capito che il problema sta nel fatto che, ad un certo punto, il divisore dell'espressione a riga 6 si trova con valore 0, ma non capisco come mai.
Non so più dove sbattere la testa
Il programma:
from visual import * from time import sleep from math import sqrt def forza_gravitazionale(): f=6.67*pow(10,-11)*((obj1.massa*obj2.massa)/(((obj1.pos[0]-obj2.pos[0])**2)+((obj1.pos[1]-obj2.pos[1])**2))) class pianeta(sphere): massa=0 mate=None v=0 radius=10 def aggiorna(self): a=f/self.massa c=float(abs(self.pos[0]-self.mate.pos[0]))/(sqrt(float(pow((self.pos[0]-self.mate.pos[0]),2)+pow((self.pos[1]-self.mate.pos[1]),2)))) ax=a*c vx=a*t*c x=vx*t+0.5*ax*pow(t,2) s=float(abs(self.pos[1]-self.mate.pos[1]))/(sqrt(float(pow((self.pos[0]-self.mate.pos[0]),2)+pow((self.pos[1]-self.mate.pos[1]),2)))) ay=a*s vy=a*t*s y=vy*t+0.5*ay*pow(t,2) self.pos=(round(x),round(y),0) t=0 f=0 obj1=pianeta() obj2=pianeta() obj1.mate=obj2 obj1.massa=20 obj1.pos=(60,60,0) obj1.color=color.red obj2.mate=obj1 obj2.massa=10 obj2.pos=(1000,2000,0) obj2.color=color.green while t!=1000: print obj1.pos print obj2.pos forza_gravitazionale() obj1.aggiorna() obj2.aggiorna() sleep(1) t=t+1
aaa