From 57b9da4597c5e72bfe3e11f876c1381b773aae52 Mon Sep 17 00:00:00 2001 From: march3 Date: Thu, 26 Oct 2023 14:37:38 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sim_scenes/fiction/earth_orbit_stopped.py | 4 +-- sim_scenes/solar_system/halley_comet_sim.py | 33 +++++++++++---------- simulators/ursina/ursina_mesh.py | 25 +++++++++------- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/sim_scenes/fiction/earth_orbit_stopped.py b/sim_scenes/fiction/earth_orbit_stopped.py index 3413721..7090669 100644 --- a/sim_scenes/fiction/earth_orbit_stopped.py +++ b/sim_scenes/fiction/earth_orbit_stopped.py @@ -146,7 +146,7 @@ class EarthOrbitStoppedSim: if mercury_range[0] - 2 < time_data.total_days < mercury_range[1]: self.mercury_orbit_line.enabled = True # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 - self.mercury_orbit_line.auto_adj_scale() + self.mercury_orbit_line.auto_adjust() else: self.mercury_orbit_line.enabled = False @@ -154,7 +154,7 @@ class EarthOrbitStoppedSim: if venus_range[0] - 2 < time_data.total_days < venus_range[1]: self.venus_orbit_line.enabled = True # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 - self.venus_orbit_line.auto_adj_scale() + self.venus_orbit_line.auto_adjust() else: self.venus_orbit_line.enabled = False diff --git a/sim_scenes/solar_system/halley_comet_sim.py b/sim_scenes/solar_system/halley_comet_sim.py index c3ae3dc..b244c88 100644 --- a/sim_scenes/solar_system/halley_comet_sim.py +++ b/sim_scenes/solar_system/halley_comet_sim.py @@ -33,15 +33,15 @@ class HalleyCometSim: def build_solar_system(self): # region 构建太阳系 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=4e3, show_trail=False) - self.venus = Venus(size_scale=4e3, show_trail=False) - self.mars = Mars(size_scale=4e3, show_trail=False) - self.jupiter = Jupiter(size_scale=1.68e3, show_trail=False) - self.saturn = Saturn(size_scale=1.68e3, show_trail=False) - self.uranus = Uranus(size_scale=3.5e3, show_trail=False) - self.neptune = Neptune(size_scale=3.5e3, show_trail=False) - self.pluto = Pluto(size_scale=1.5e5, show_trail=False) + self.mercury = Mercury(size_scale=5e3, show_trail=False) + self.venus = Venus(size_scale=5e3, show_trail=False) + self.earth = Earth(size_scale=5e3, rotate_angle=0, show_trail=False) + self.mars = Mars(size_scale=5e3, show_trail=False) + self.jupiter = Jupiter(size_scale=2.5e3, show_trail=False) + self.saturn = Saturn(size_scale=2.5e3, show_trail=False) + self.uranus = Uranus(size_scale=6e3, show_trail=False) + self.neptune = Neptune(size_scale=6e3, show_trail=False) + self.pluto = Pluto(size_scale=1e5, show_trail=False) self.bodies = [ self.sun, # 太阳 self.mercury, # 水星 @@ -71,7 +71,7 @@ class HalleyCometSim: # [3.33, 0, 10.655] 68 # [3.33, 0, 10.66] 69 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_position=[0, 0.5 * AU, -10 * AU]) \ .set_light_disable(True) @@ -90,6 +90,8 @@ class HalleyCometSim: # 创建天空 from ursina import scene UrsinaConfig.trail_type = "line" + UrsinaConfig.trail_length = 91 + UrsinaConfig.trail_thickness_factor = 3 # camera.clip_plane_near = 0.1 camera.clip_plane_far = 1000000 create_sphere_sky(scale=200000) @@ -111,21 +113,22 @@ class HalleyCometSim: @param time_data: @return: """ - # 原始方形二向箔飞行的翻转效果 + # 哈雷彗星飞行的翻转效果 if self.halley_comet.planet.enabled: self.halley_comet.planet.rotation_x += 0.1 self.halley_comet.planet.rotation_y += 1 - # 摄像机始终看向二向箔 + # 摄像机始终看向哈雷彗星 # camera_look_at(self.halley_comet) d = calculate_distance(self.halley_comet.position, self.sun.position) self.text_panel.text = "哈雷彗星距离太阳:%.3f AU" % (d / AU) for i, orbit_line in enumerate(self.orbit_lines): if i < 4: - # 近日的天体绕行非常快,不调整轨道大小 - continue + adj_scale = False + else: + adj_scale = True # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 - orbit_line.auto_adj_scale() + orbit_line.auto_adjust(adj_scale=adj_scale) if __name__ == '__main__': diff --git a/simulators/ursina/ursina_mesh.py b/simulators/ursina/ursina_mesh.py index c459458..dc8c117 100644 --- a/simulators/ursina/ursina_mesh.py +++ b/simulators/ursina/ursina_mesh.py @@ -197,21 +197,26 @@ def get_obj_planet_position(obj): 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 orbiting_obj: 绕行天体,一般为行星天体 @param orbit_line: 绕行天体轨道,一般为行星轨道 + @param adj_center_pos: 是否调整轨道线的中心位置 + @param adj_scale: 是否调整轨道线的缩放 @return: """ # - distance = calculate_distance(center_obj.position - orbiting_obj.position) - scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius - # 根据距离调整缩放 - orbit_line.scale = scale_rate - # 保证轨道中心的位置始终是中心天体的位置 - orbit_line.position = center_obj.planet.position + if adj_scale: + # 根据距离调整缩放 + distance = calculate_distance(center_obj.position - orbiting_obj.position) + scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius + orbit_line.scale = scale_rate + + if adj_center_pos: + # 保证轨道中心的位置始终是中心天体的位置 + orbit_line.position = center_obj.planet.position def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, alpha=0.6, @@ -248,10 +253,10 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al if rotation_z is not None: orbit_line.rotation_z = rotation_z - def adj_scale(): - adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line) + def auto_adjust(adj_center_pos=True, adj_scale=True): + 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 # 默认不显示 return orbit_line -- GitLab