A lo mejor os parece raro que no haya algún While o similar. Lo que pasa es que en Blender van sucediéndose fotogramas (24 por segundo) y en cada fotograma se ejecuta el código, así que ya se va repitiendo.
from bge import logic, events
import math
def Player():
cont = logic.getCurrentController()
obj = cont.owner
#Hasta aquí todo eran órdenes muy específicas de Blender, mejor ni mirarlas
#Lo importante es que obj se refiere a la esfera pequena
if not 'init' in obj: #Esto solo quiero que se ejecute una vez
obj['init'] = 1
#Aquí defino la velocidad inicial, solo la primera vez que se ejecute el código
obj['vox']=0.05
obj['voy']=0.06
#Aquí defino la masa de ambos cuerpos, y la constante gravitacional
m1=250000000
m2=2000
G=0.0000000000667
#Obtengo la posición actual y calculo la distancia al origen de coordenadas (hipotenusa)
x=obj.position[0]
y=obj.position[1]
r=math.hypot(x,y)
#Utilizo la fórmula de la gravedad entre cuerpos
F=G*m1*m2/(r*r)
#A partir de la fuerza se obtiene la acelaración
a=F/m2
#Descompongo en componente x e y
ax=-a*x/r
ay=-a*y/r
#Calculo la velocidad actual basándome en la velocidad anterior y en la aceleración
vx=obj['vox']+ax
vy=obj['voy']+ay
#Obtengo la posición actual a partir de la anterior y la velocidad
xf=x+vx
yf=y+vy
#Muevo el objeto esfera
obj.position[0]=xf
obj.position[1]=yf
#Por último guardo la velocidad actual para que pase a ser "anterior"
obj['vox']=vx
obj['voy']=vy
El problema sería que si ponemos las variables demasiado realistas tendríamos una esfera "Tierra" que tardaría un año en darle la vuelta al sol, así que he tenido que cocinar un poco las masas y la velocidad inicial para que resulte una animación más rápida, aquí la tenéis:
Se puede configurar para que haga una órbita muy excéntrica, o lo que se quiera:
Si alguien quiere el archivo blender que lo diga.
3 comentarios:
Faltaría ver el eje de coordenadas pero a primera vista diría que la tierra está retrocediendo en el tiempo.
Muy observador coco, he estado pensando cómo debe ser el movimiento de traslación de la Tierra en función de cómo van apareciendo nuevas constelaciones por el Este a medida que avanza el año y ciertamente parece que el movimiento de traslación debería ser al revés, es decir antihorario... siempre que estemos mirando el sistema solar desde el polo norte del plano de la eclíptica. Miraré en la enciclopedia a ver.
Por otra parte se comprueba con el modelo que Bater ha puesto que la trayectoria seguida por un cuerpo bajo la influencia de un campo gravitatorio, no depende de su masa sino de su velocidad inicial. Así, existen los famosos troyanos, que son objetos de mucho menor masa que la Tierra y que comparten la órbita de ésta.
Publicar un comentario