提交 1f719328 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 c1b791b5
......@@ -56,6 +56,25 @@ def mayavi_run(bodies, dt=SECONDS_PER_WEEK,
mlab.show()
def camera_look_at(body, rotation_x=None, rotation_y=None, rotation_z=None):
"""
让摄像机看向指定天体
@param body: 天体
@param rotation_x: x轴旋转角度(None表示不旋转)
@param rotation_y: y轴旋转角度(None表示不旋转)
@param rotation_z: z轴旋转角度(None表示不旋转)
@return:
"""
from ursina import camera
camera.look_at(body.planet)
if rotation_x is not None:
camera.rotation_x = rotation_x
if rotation_y is not None:
camera.rotation_y = rotation_y
if rotation_z is not None:
camera.rotation_z = rotation_z
def ursina_run(bodies,
dt=SECONDS_PER_HALF_DAY,
position=(0, 0, 0),
......
......@@ -8,25 +8,35 @@
# ==============================================================================
from bodies import Sun, Earth, Moon
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH
from sim_scenes.func import mayavi_run, ursina_run
from sim_scenes.func import mayavi_run, ursina_run, camera_look_at
from bodies.body import AU
from simulators.ursina.ursina_event import UrsinaEvent
if __name__ == '__main__':
"""
地球、月球
"""
# 地球的Y方向初始速度
EARTH_INIT_VELOCITY = 0
OFFSETTING = 0
# TODO: 抵消月球带动地球的力
# OFFSETTING = 0.01265
bodies = [
# sun,
Earth(init_position=[0, 0, 0], texture="earth_hd.jpg",
init_velocity=[-EARTH_INIT_VELOCITY, 0, 0], size_scale=0.5e1), # 地球放大 5 倍,距离保持不变
init_velocity=[OFFSETTING, 0, 0], size_scale=0.5e1), # 地球放大 5 倍,距离保持不变
Moon(init_position=[0, 0, 363104], # 距地距离约: 363104 至 405696 km
init_velocity=[-(EARTH_INIT_VELOCITY + 1.023), 0, 0], size_scale=1e1) # 月球放大 10 倍,距离保持不变
init_velocity=[-1.03, 0, 0], size_scale=1e1) # 月球放大 10 倍,距离保持不变
]
# mayavi_run(bodies, SECONDS_PER_HALF_DAY / 2, view_azimuth=-45)
def on_ready():
earth = bodies[0]
camera_look_at(earth)
UrsinaEvent.on_ready_subscription(on_ready)
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_MONTH, position=(-300000, 200000, -1300000), show_trail=True)
ursina_run(bodies, SECONDS_PER_MONTH,
position=(-300000, 1500000, -1000),
show_timer=True,
show_trail=True)
......@@ -8,7 +8,7 @@
# ==============================================================================
from bodies import Sun, Earth, Moon
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH
from sim_scenes.func import mayavi_run, ursina_run
from sim_scenes.func import mayavi_run, ursina_run, camera_look_at
from bodies.body import AU
from simulators.ursina.ursina_event import UrsinaEvent
......@@ -41,17 +41,16 @@ if __name__ == '__main__':
moon
]
def on_timer_changed(time_data):
from ursina import camera,Vec3
camera_look_at(moon, rotation_z=0)
camera.look_at(moon.planet)
camera.rotation_z = 0
# 订阅计时器事件(记录已到达天体列表
# 订阅计时器事件(定时触发
UrsinaEvent.on_timer_changed_subscription(on_timer_changed)
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
# position=(0, 0, 0) 的位置是站在地球视角,可以观看月相变化的过程
ursina_run(bodies, SECONDS_PER_DAY, position=(0, 0, 0),show_timer=True)
ursina_run(bodies, SECONDS_PER_DAY, position=(0, 0, 0), show_timer=True)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册