Oppure

Loading
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 :yup:

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
12/04/12 20:34
Dark_light
Rivediti aggiorna...


dopo 2-3 passaggi aggiorna() mette a 0 il contenuto di pos
Ultima modifica effettuata da Dark_light 12/04/12 21:26
aaa
13/04/12 17:52
Il_Bomba
Ok, grazie :)
aaa
13/04/12 18:27
Dark_light
prego, facci sapere

;)
Ultima modifica effettuata da Dark_light 13/04/12 18:28
aaa