提交 57b9da45 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 e9ab9d0a
...@@ -146,7 +146,7 @@ class EarthOrbitStoppedSim: ...@@ -146,7 +146,7 @@ class EarthOrbitStoppedSim:
if mercury_range[0] - 2 < time_data.total_days < mercury_range[1]: if mercury_range[0] - 2 < time_data.total_days < mercury_range[1]:
self.mercury_orbit_line.enabled = True self.mercury_orbit_line.enabled = True
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
self.mercury_orbit_line.auto_adj_scale() self.mercury_orbit_line.auto_adjust()
else: else:
self.mercury_orbit_line.enabled = False self.mercury_orbit_line.enabled = False
...@@ -154,7 +154,7 @@ class EarthOrbitStoppedSim: ...@@ -154,7 +154,7 @@ class EarthOrbitStoppedSim:
if venus_range[0] - 2 < time_data.total_days < venus_range[1]: if venus_range[0] - 2 < time_data.total_days < venus_range[1]:
self.venus_orbit_line.enabled = True self.venus_orbit_line.enabled = True
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
self.venus_orbit_line.auto_adj_scale() self.venus_orbit_line.auto_adjust()
else: else:
self.venus_orbit_line.enabled = False self.venus_orbit_line.enabled = False
......
...@@ -33,15 +33,15 @@ class HalleyCometSim: ...@@ -33,15 +33,15 @@ class HalleyCometSim:
def build_solar_system(self): def build_solar_system(self):
# region 构建太阳系 # region 构建太阳系
self.sun = Sun(size_scale=0.8e2, show_trail=False) self.sun = Sun(size_scale=0.8e2, show_trail=False)
self.earth = Earth(size_scale=8e3, rotate_angle=0, show_trail=False) self.mercury = Mercury(size_scale=5e3, show_trail=False)
self.mercury = Mercury(size_scale=4e3, show_trail=False) self.venus = Venus(size_scale=5e3, show_trail=False)
self.venus = Venus(size_scale=4e3, show_trail=False) self.earth = Earth(size_scale=5e3, rotate_angle=0, show_trail=False)
self.mars = Mars(size_scale=4e3, show_trail=False) self.mars = Mars(size_scale=5e3, show_trail=False)
self.jupiter = Jupiter(size_scale=1.68e3, show_trail=False) self.jupiter = Jupiter(size_scale=2.5e3, show_trail=False)
self.saturn = Saturn(size_scale=1.68e3, show_trail=False) self.saturn = Saturn(size_scale=2.5e3, show_trail=False)
self.uranus = Uranus(size_scale=3.5e3, show_trail=False) self.uranus = Uranus(size_scale=6e3, show_trail=False)
self.neptune = Neptune(size_scale=3.5e3, show_trail=False) self.neptune = Neptune(size_scale=6e3, show_trail=False)
self.pluto = Pluto(size_scale=1.5e5, show_trail=False) self.pluto = Pluto(size_scale=1e5, show_trail=False)
self.bodies = [ self.bodies = [
self.sun, # 太阳 self.sun, # 太阳
self.mercury, # 水星 self.mercury, # 水星
...@@ -71,7 +71,7 @@ class HalleyCometSim: ...@@ -71,7 +71,7 @@ class HalleyCometSim:
# [3.33, 0, 10.655] 68 # [3.33, 0, 10.655] 68
# [3.33, 0, 10.66] 69 # [3.33, 0, 10.66] 69
self.halley_comet = HalleComet( # size_scale=4e7, self.halley_comet = HalleComet( # size_scale=4e7,
size_scale=0.5e8, size_scale=1e8,
init_velocity=[3.34, 0, 10.7], # [3.33, 0, 10.6] < ? <[3.34, 0, 10.7] init_velocity=[3.34, 0, 10.7], # [3.33, 0, 10.6] < ? <[3.34, 0, 10.7]
init_position=[0, 0.5 * AU, -10 * AU]) \ init_position=[0, 0.5 * AU, -10 * AU]) \
.set_light_disable(True) .set_light_disable(True)
...@@ -90,6 +90,8 @@ class HalleyCometSim: ...@@ -90,6 +90,8 @@ class HalleyCometSim:
# 创建天空 # 创建天空
from ursina import scene from ursina import scene
UrsinaConfig.trail_type = "line" UrsinaConfig.trail_type = "line"
UrsinaConfig.trail_length = 91
UrsinaConfig.trail_thickness_factor = 3
# camera.clip_plane_near = 0.1 # camera.clip_plane_near = 0.1
camera.clip_plane_far = 1000000 camera.clip_plane_far = 1000000
create_sphere_sky(scale=200000) create_sphere_sky(scale=200000)
...@@ -111,21 +113,22 @@ class HalleyCometSim: ...@@ -111,21 +113,22 @@ class HalleyCometSim:
@param time_data: @param time_data:
@return: @return:
""" """
# 原始方形二向箔飞行的翻转效果 # 哈雷彗星飞行的翻转效果
if self.halley_comet.planet.enabled: if self.halley_comet.planet.enabled:
self.halley_comet.planet.rotation_x += 0.1 self.halley_comet.planet.rotation_x += 0.1
self.halley_comet.planet.rotation_y += 1 self.halley_comet.planet.rotation_y += 1
# 摄像机始终看向二向箔 # 摄像机始终看向哈雷彗星
# camera_look_at(self.halley_comet) # camera_look_at(self.halley_comet)
d = calculate_distance(self.halley_comet.position, self.sun.position) d = calculate_distance(self.halley_comet.position, self.sun.position)
self.text_panel.text = "哈雷彗星距离太阳:%.3f AU" % (d / AU) self.text_panel.text = "哈雷彗星距离太阳:%.3f AU" % (d / AU)
for i, orbit_line in enumerate(self.orbit_lines): for i, orbit_line in enumerate(self.orbit_lines):
if i < 4: if i < 4:
# 近日的天体绕行非常快,不调整轨道大小 adj_scale = False
continue else:
adj_scale = True
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
orbit_line.auto_adj_scale() orbit_line.auto_adjust(adj_scale=adj_scale)
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -197,19 +197,24 @@ def get_obj_planet_position(obj): ...@@ -197,19 +197,24 @@ def get_obj_planet_position(obj):
return pos1 return pos1
def adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line): def adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line, adj_center_pos=True, adj_scale=True):
""" """
由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
@param center_obj: 中心天体,一般为恒星天体 @param center_obj: 中心天体,一般为恒星天体
@param orbiting_obj: 绕行天体,一般为行星天体 @param orbiting_obj: 绕行天体,一般为行星天体
@param orbit_line: 绕行天体轨道,一般为行星轨道 @param orbit_line: 绕行天体轨道,一般为行星轨道
@param adj_center_pos: 是否调整轨道线的中心位置
@param adj_scale: 是否调整轨道线的缩放
@return: @return:
""" """
# #
if adj_scale:
# 根据距离调整缩放
distance = calculate_distance(center_obj.position - orbiting_obj.position) distance = calculate_distance(center_obj.position - orbiting_obj.position)
scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius
# 根据距离调整缩放
orbit_line.scale = scale_rate orbit_line.scale = scale_rate
if adj_center_pos:
# 保证轨道中心的位置始终是中心天体的位置 # 保证轨道中心的位置始终是中心天体的位置
orbit_line.position = center_obj.planet.position orbit_line.position = center_obj.planet.position
...@@ -248,10 +253,10 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al ...@@ -248,10 +253,10 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al
if rotation_z is not None: if rotation_z is not None:
orbit_line.rotation_z = rotation_z orbit_line.rotation_z = rotation_z
def adj_scale(): def auto_adjust(adj_center_pos=True, adj_scale=True):
adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line) adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line, adj_center_pos, adj_scale)
orbit_line.auto_adj_scale = adj_scale orbit_line.auto_adjust = auto_adjust
# orbit_line.enabled = False # 默认不显示 # orbit_line.enabled = False # 默认不显示
return orbit_line return orbit_line
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册