
Procura aqui no fórum que encontras (penso que sim!) informação sobre este tópico - creio que possivelmente até nalguma simulação semelhante à tua (muito fixe, parabéns!

jap Escreveu:Não sei qual é o problema, mas desde já recomendaria fortemente que reescrevesses o teu programa usando unidades astronómicas!![]()
jap Escreveu:Sim, é preciso calcular o valor de G nestas unidades!
BTW, acho que vou utilizar o teu programa como exemplo numa das próximas sessões pitónicas, pode ser?
def distance(a,b):
return math.sqrt((a.pos.x-b.pos.x)**2 + (a.pos.y-b.pos.y)**2 + (a.pos.z-b.pos.z)**2) #distancia entre 2 corpos
def gravidade(a,b):
F=(G*a.mass*b.mass)/((distance(a,b))**2) #lei da gravitacao universal
a.modulo=(F/a.mass) # 2a lei de newton
b.modulo=(F/b.mass) # para o sol
a.accelaration=vector(b.pos.x-a.pos.x,b.pos.y-a.pos.y,b.pos.z-a.pos.z) #vector direcional da normal
a.k=a.modulo/math.sqrt((a.accelaration.x**2)+(a.accelaration.y**2)+(a.accelaration.z**2)) # k que ajusta o modulo da aceleracao
a.centripeta=vector(a.accelaration.x*a.k,a.accelaration.y*a.k,a.accelaration.z*a.k) # ajuste do modulo para ter a verdadeira aceleracao centripeta
a.vel+=a.centripeta
a.pos+=a.vel
b.accelaration=vector(a.pos.x-b.pos.x,a.pos.y-b.pos.y,a.pos.z-b.pos.z) # repetir tudo para o 2o corpo
b.k=b.modulo/math.sqrt((b.accelaration.x**2)+(b.accelaration.y**2)+(b.accelaration.z**2))
b.centripeta=vector(b.accelaration.x*b.k,b.accelaration.y*b.k,b.accelaration.z*b.k)
b.vel+=b.centripeta
b.pos+=b.vel
def orbital(a,b):
a.speed=float(math.sqrt((G*b.mass)/distance(a,b))) #velocidade orbital
a.perpendicular=vector(a.pos.x-b.pos.x,0,a.pos.z-b.pos.z) #vector direccional centripeta
a.correcto=vector(1,0,(-a.perpendicular.x)/a.perpendicular.z) #vector perpendicular a trajectoria (pretendido), com uma primeira coordenada aleatoria
a.factor=a.speed/mag(a.certo) #factor de acerto do modulo
return vector(a.correcto.x*a.factor,0,a.correcto.z*a.factor)
def todas_interacoes():
objectos=[]
for corpo in scene.objects:
if corpo.__class__ == sphere:
objectos.append(corpo)
for obj in objectos[:-1]:
for i in range(objectos.index(obj)+1,len(objectos)):
gravidade(obj,objectos[i])
while True:
rate(100)
scene.center=sun.pos
todas_interacoes()
t+=0.01
Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante