提交 628ad79b 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 d28fe8b2
...@@ -12,7 +12,7 @@ import numpy as np ...@@ -12,7 +12,7 @@ import numpy as np
from bodies import Sun, Mercury, Venus, Earth, Mars, Asteroids, Jupiter, Saturn, Uranus, Neptune, Moon from bodies import Sun, Mercury, Venus, Earth, Mars, Asteroids, Jupiter, Saturn, Uranus, Neptune, Moon
from common.celestial_data_service import get_body_posvel, recalc_moon_position, calc_solar_acceleration, \ from common.celestial_data_service import get_body_posvel, recalc_moon_position, calc_solar_acceleration, \
set_solar_system_celestial_position, set_earth_rotation set_solar_system_celestial_position, set_earth_rotation
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, AU from common.consts import SECONDS_PER_MONTH, SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, AU
from sim_scenes.func import ursina_run, create_sphere_sky, two_bodies_colliding from sim_scenes.func import ursina_run, create_sphere_sky, two_bodies_colliding
from sim_scenes.universe_sim_scenes import UniverseSimScenes from sim_scenes.universe_sim_scenes import UniverseSimScenes
from simulators.ursina.entities.body_timer import TimeData from simulators.ursina.entities.body_timer import TimeData
...@@ -150,11 +150,14 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -150,11 +150,14 @@ class SolarSystemRealitySim(UniverseSimScenes):
# 需要按照时间和日期来控制地球的自转,所以删除控制地球自转的属性 # 需要按照时间和日期来控制地球的自转,所以删除控制地球自转的属性
delattr(self.earth.planet, "rotation_speed") delattr(self.earth.planet, "rotation_speed")
delattr(self.earth.planet, "rotspeed") delattr(self.earth.planet, "rotspeed")
self.ship.planet.update = lambda: None
# 设置后,可以调整鼠标键盘的控制速度 # 设置后,可以调整鼠标键盘的控制速度
application.time_scale = 1 application.time_scale = 0.01
self.ship.planet.position = self.earth.planet.position self.ship.planet.position = self.earth.planet.position
self.ship.planet.update = lambda :None
camera.update = lambda :None
def ship_go_target(self): def ship_go_target(self):
from ursina import distance from ursina import distance
...@@ -170,7 +173,7 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -170,7 +173,7 @@ class SolarSystemRealitySim(UniverseSimScenes):
# r = d * 10 # r = d * 10
# if r<100: # if r<100:
# r = 100 # r = 100
r = 500 r = 20
self.ship.planet.look_at(planet) self.ship.planet.look_at(planet)
self.ship.planet.position += self.ship.planet.forward * r self.ship.planet.position += self.ship.planet.forward * r
...@@ -181,14 +184,23 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -181,14 +184,23 @@ class SolarSystemRealitySim(UniverseSimScenes):
self.target_index += 1 self.target_index += 1
planet.arrived = True planet.arrived = True
def on_timer_changed(self, time_data: TimeData): def on_timer_changed(self, time_data: TimeData):
""" """
事件绑定后,时时刻刻都会触发 事件绑定后,时时刻刻都会触发
@param time_data: @param time_data:
@return: @return:
""" """
from ursina import Vec3
self.ship_go_target() self.ship_go_target()
target = self.targets[self.target_index]
planet = target.planet.main_entity
camera.look_at(planet)
camera.position = self.ship.planet.position + Vec3(10, 10, 10)
dt = time_data.get_datetime(str(self.start_time)) dt = time_data.get_datetime(str(self.start_time))
# 设置天体的位置(包含速度和加速度的信息) # 设置天体的位置(包含速度和加速度的信息)
self.set_bodies_position(time_data) self.set_bodies_position(time_data)
...@@ -272,7 +284,7 @@ if __name__ == '__main__': ...@@ -272,7 +284,7 @@ if __name__ == '__main__':
sim.run( sim.run(
# debug_mode=True, # 是否调试模式 # debug_mode=True, # 是否调试模式
dt=SECONDS_PER_DAY , # 1秒=1天 dt=SECONDS_PER_DAY , # 1秒=1天
# dt=SECONDS_PER_HOUR, # 1秒=1小时 # dt=SECONDS_PER_WEEK, # 1秒=1周
# dt=SECONDS_PER_HOUR, # 1秒=1小时 # dt=SECONDS_PER_HOUR, # 1秒=1小时
start_time='2149-12-10 12:00:00', # 九(八)星连珠的时间 # https://baijiahao.baidu.com/s?id=1654160345900112362 start_time='2149-12-10 12:00:00', # 九(八)星连珠的时间 # https://baijiahao.baidu.com/s?id=1654160345900112362
# show_asteroids=True, # 是否显示小行星带(图片模拟) # show_asteroids=True, # 是否显示小行星带(图片模拟)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册