parabolic orbit needs adjustement

parents
# planetas.py - Animação do sistema solar
# Este script cria um modelo simplificado do sistema solar
# composto pelo sol e os 3 primeiros planetas internos em orbitas circulares.
# As dimensões dos corpos estão exageradas para fins de visualização
#
# Para utilizar este script chame o blender com a opção -P e o nome do arquivo
#
# $ blender -P ./planetas.py
import bpy
import math
bpy.context.user_preferences.view.show_splash = False
t_video=40 # duração da animação em segundos
t_simulado=86400*365*5 # tempo próprio da simulação em segundos
fps = 60 # quadros por segundo
N_quadros=t_video*fps # calculando numero de quadros totais
delta_t=t_simulado/N_quadros # tempo passado por quadro
omega_Terra = 2.0*math.pi/(365*24*60*60)
omega_Venus = 2.0*math.pi/(224.7*24*60*60)
omega_Mercurio = 2.0*math.pi/(87.96*24*60*60)
r_orb_venus = 0.723 # u.a.
r_orb_mercurio = 0.387 # u.a.
E = 1 ## escolhe aqui a energia mecânica do programa
def criaobjetos():
#Inicia limpando a cena - ATENÇÃO - apaga todos os objetos!!
#for objeto in bpy.data.objects:
#bpy.data.objects.remove(objeto)
for o in bpy.context.scene.objects :
if (o.type == 'MESH'):
o.select = True
else:
o.select = False
bpy.ops.object.delete()
#Adiciona o Sol
bpy.ops.mesh.primitive_uv_sphere_add()
Sol = bpy.context.object
Sol.name = "Sol"
Sol.location=((0,0,0))
r_sol = 0.4652/8 # Raio do sol = 0.004652 u.a
Sol.delta_scale=(r_sol,r_sol,r_sol)
#Adiciona a Terra
bpy.ops.mesh.primitive_uv_sphere_add()
Terra = bpy.context.object
Terra.name = "Terra"
Terra.location=((1,0,0))
r_terra = 0.03 # Raio da terra exagerado
Terra.delta_scale=(r_terra,r_terra,r_terra)
#TerraAzul=bpy.ops.material.new(
#Terra.active_material = bpy.data.materials['TerraAzul']
bpy.ops.object.camera_add(location=(0, 0, 0))
bpy.ops.object.lamp_add(type='SUN',location=(0,0,0))
## TODO: Fazer sol não emitir sombra e adicionar lamp type='POINT' na origem
## Isto irá representar o dia/noite dos planetas
def run(energy):
bpy.context.scene.render.fps=fps
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = N_quadros
Terra = bpy.data.objects['Terra']
Sol = bpy.data.objects['Sol']
e = float(energy)
if (e < 0 and e > -1): #elipse
for f in range(1, N_quadros):
t=delta_t*f
bpy.context.scene.frame_current = f
bpy.context.scene.objects.active=Terra
Terra.location=((3*math.cos(omega_Terra*t),math.sin(omega_Terra*t),0))
Terra.keyframe_insert(data_path='location')
elif (e > 1): #hipérbole ## PRECISA ARRUMAR
for f in range(1, N_quadros):
t=delta_t*f
bpy.context.scene.frame_current = f
bpy.context.scene.objects.active=Terra
Terra.location=((1/math.cos(omega_Terra*t),math.tan(omega_Terra*t),0))
Terra.keyframe_insert(data_path='location')
elif (e == 1): #parábola ## PRECIDA DE REPAROS
for f in range(1, N_quadros):
t=delta_t*f
bpy.context.scene.frame_current = f
bpy.context.scene.objects.active=Terra
Terra.location=(((1/2)*omega_Terra*t + 5), (1/2)*pow(omega_Terra*t,2) - 6,0)
Terra.keyframe_insert(data_path='location')
elif (e == -1): #círculo
Sol.location=((0,0,0))
for f in range(1, N_quadros):
t=delta_t*f
bpy.context.scene.frame_current = f
bpy.context.scene.objects.active=Terra
Terra.location=((math.cos(omega_Terra*t),math.sin(omega_Terra*t),0))
Terra.keyframe_insert(data_path='location')
criaobjetos()
run(E)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment