提交 91d92d69 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 488311d4
......@@ -453,7 +453,7 @@ class Body(metaclass=ABCMeta):
"""
self.position = copy.deepcopy(self.init_position)
self.velocity = copy.deepcopy(self.init_velocity)
self.clear_his_position()
# def kinetic_energy(self):
# """
# 计算动能(千焦耳)
......
......@@ -10,7 +10,12 @@ from bodies import Sun, Earth
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_YEAR, SECONDS_PER_MONTH, AU
from sim_scenes.func import mayavi_run, ursina_run, create_sphere_sky
from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent
from ursina import application, window, camera, EditorCamera
import numpy as np
from simulators.ursina_simulator import UrsinaSimulator
if __name__ == '__main__':
"""
......@@ -27,32 +32,78 @@ if __name__ == '__main__':
size_scale=5e1, texture="sun21.jpg", color=(250, 195, 47)), # 红色太阳
Sun(mass=2.5e30, init_position=[0, -8.5e8, -2000000], init_velocity=[12.0, 0, 0],
size_scale=5e1, texture="sun21.jpg", color=(198, 29, 3)), # 黄色太阳
Earth(init_position=[0, -3.5e8, 3000000], init_velocity=[13.360, 0, 0],
Earth(init_position=[0, -3.5e8, 3000000], init_velocity=[13.360, 0, 0], rotate_angle=0,
size_scale=4e3, distance_scale=1), # 地球放大 4000 倍,距离保持不变
]
# 使用 mayavi 查看的运行效果
# mayavi_run(bodies, SECONDS_PER_WEEK, view_azimuth=0)
def on_ready():
from ursina import application, window
from ursina import camera
sky = create_sphere_sky(scale=80000, texture="bg_pan_blue.jpg")
window.borderless = False
sky = create_sphere_sky(scale=80000, texture="bg_pan_deep_blue.jpg")
camera.clip_plane_near = 1
camera.clip_plane_far = sky.scale_x*1.5
camera.clip_plane_far = sky.scale_x * 1.5
def on_timer_changed(time_data: TimeData):
pass
total_days = time_data.total_days
ec = UrsinaSimulator.EditorCamera
print(total_days)
if 100 < total_days < 3000:
camera.position += camera.right * 0.1
camera.position += camera.down * 0.01
elif 3200 < total_days < 3600:
ec.target_z -= 7.5
elif 6000 < total_days < 7500:
camera.position += camera.right * 1
camera.position += camera.down * 0.5
elif 10800 < total_days < 12000:
camera.position += camera.right * 1
# elif total_days > 10765:
elif total_days > 17000:
UrsinaEvent.on_reset()
# camera.position = UrsinaConfig.SCALE_FACTOR * np.array([10 * AU, -2 * AU, -20 * AU]),
# elif total_days > 3500:
# camera.position += camera.back * 0.1
def on_reset():
reset_camera()
def reset_camera():
# 参考 EditorCamera 中的 elif key == 'scroll up':
ec = UrsinaSimulator.EditorCamera
if not hasattr(ec, "original_target_z"):
ec.original_target_z = ec.target_z
camera.original_position = camera.position
else:
ec.target_z = ec.original_target_z
camera.position = camera.original_position
UrsinaConfig.trail_type = "line"
# UrsinaConfig.trail_length = 91
# UrsinaConfig.trail_type = "curve_line"
UrsinaConfig.trail_length = 50
# UrsinaConfig.trail_length = 1000
UrsinaConfig.trail_thickness_factor = 2
# 运行前会触发 on_ready
UrsinaEvent.on_ready_subscription(on_ready)
# 运行中,每时每刻都会触发 on_timer_changed
UrsinaEvent.on_timer_changed_subscription(on_timer_changed)
UrsinaEvent.on_reset_subscription(on_reset)
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_YEAR / 3,
cosmic_bg='',
show_grid=False,
position=(20 * AU, 0, -40 * AU),
# position=(20 * AU, 0, -40 * AU),
position=(10 * AU, -2 * AU, -20 * AU),
show_camera_info=False,
show_control_info=False,
show_trail=True,
timer_enabled=True)
\ No newline at end of file
timer_enabled=True)
......@@ -404,7 +404,7 @@ class UrsinaSimulator(Simulator):
audio = Audio(bg_music, pitch=1, loop=True, autoplay=True)
audio.volume = 0.3
EditorCamera(ignore_paused=True)
UrsinaSimulator.EditorCamera = EditorCamera(ignore_paused=True)
if self.show_timer or self.timer_enabled:
UrsinaEvent.on_reset()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册