diff --git a/sim_scenes/fiction/earth_orbit_stopped.py b/sim_scenes/fiction/earth_orbit_stopped.py index c7fa5941a4a8d1dbff9aa080f739102e907c8d73..397be8c777e5dbbb65fa4e5603fa7f661a02a294 100644 --- a/sim_scenes/fiction/earth_orbit_stopped.py +++ b/sim_scenes/fiction/earth_orbit_stopped.py @@ -19,7 +19,7 @@ from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_event import UrsinaEvent from ursina import application, camera, Vec3 import math -from simulators.ursina.ursina_mesh import create_circle_line +from simulators.ursina.ursina_mesh import create_circle_line, create_orbit_line from ursina import color @@ -32,7 +32,7 @@ class EarthOrbitStoppedSim: def __init__(self): self.sun = Sun(init_position=[0, 0, 0], size_scale=1) - self.earth = Earth(init_position=[0, 0, -AU], # texture="earth2.jpg", + self.earth = Earth(init_position=[0, 0, -AU], # texture="earth2.jpg", init_velocity=[0, self.EARTH_INIT_VELOCITY, 0], size_scale=1).set_light_disable(True) # 水星轨道半径 @@ -73,7 +73,7 @@ class EarthOrbitStoppedSim: """ orbit_line = create_circle_line(parent=self.sun, radius=radius, thickness=5, color=color, alpha=0.3) orbit_line.rotation_x = 90 - orbit_line.enabled = False # 默认不显示 + orbit_line.enabled = False # 默认不显示 return orbit_line def on_ready(self): @@ -89,13 +89,9 @@ class EarthOrbitStoppedSim: replace("${acceleration}", "0") # 创建水星轨道线 - self.mercury_orbit_line = self.create_orbit_line( - radius=self.mercury_radius * UrsinaConfig.SCALE_FACTOR, - color=self.mercury.color) + self.mercury_orbit_line = create_orbit_line(self.sun, self.mercury) # 创建金星轨道线 - self.venus_orbit_line = self.create_orbit_line( - radius=self.venus_radius * UrsinaConfig.SCALE_FACTOR, - color=self.venus.color) + self.venus_orbit_line = create_orbit_line(self.sun, self.venus) def on_timer_changed(self, time_data: TimeData): # 摄像机时时刻刻看向地球 diff --git a/sim_scenes/solar_system/halley_comet_sim.py b/sim_scenes/solar_system/halley_comet_sim.py index b3f131e8daee45585dde63ab7a2cafce85ec7501..e4ba24084fbb0b2f7428d7b5db1b9f1818816e06 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, distance_scale=1, rotate_angle=0, show_trail=False) - self.mercury = Mercury(size_scale=4e3, distance_scale=1, show_trail=False) - self.venus = Venus(size_scale=4e3, distance_scale=1, show_trail=False) - self.mars = Mars(size_scale=4e3, distance_scale=1, show_trail=False) - self.jupiter = Jupiter(size_scale=1.68e3, distance_scale=1, show_trail=False) - self.saturn = Saturn(size_scale=1.68e3, distance_scale=1, show_trail=False) - self.uranus = Uranus(size_scale=3.5e3, distance_scale=1, show_trail=False) - self.neptune = Neptune(size_scale=3.5e3, distance_scale=1, show_trail=False) - self.pluto = Pluto(size_scale=1.5e5, distance_scale=1, 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.bodies = [ self.sun, # 太阳 self.mercury, # 水星 @@ -102,9 +102,6 @@ class HalleyCometSim: orbit_line = create_orbit_line(self.sun, body) orbit_line.body = body self.orbit_lines.append(orbit_line) - # orbit_line.parent = scene - # self.earth_orbit = create_orbit_line(self.sun, self.earth) - # self.pluto_orbit = create_orbit_line(self.sun, self.pluto, alpha=1) self.text_panel = create_text_panel() @@ -125,17 +122,18 @@ class HalleyCometSim: for i, orbit_line in enumerate(self.orbit_lines): if i < 4: + # 近日的天体绕行非常快,不调整轨道大小 continue body = orbit_line.body + # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 distance = calculate_distance(self.sun.position - body.position) - scale_rate = distance * UrsinaConfig.SCALE_FACTOR * 0.695 / orbit_line.radius + scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius orbit_line.scale = scale_rate - if __name__ == '__main__': """ - 三体二向箔场景模拟 + 哈雷彗星场景模拟 """ sim = HalleyCometSim() sim.build() diff --git a/simulators/ursina/entities/circle_line.py b/simulators/ursina/entities/circle_line.py index 5bf3176691816975a385ba6238c876cb88a99545..9bd730cddbc7e73270650a098de7438d7f6593d7 100644 --- a/simulators/ursina/entities/circle_line.py +++ b/simulators/ursina/entities/circle_line.py @@ -26,7 +26,7 @@ class CircleLine(Entity): def create_circle_line(self): angle_step = 360 / self.segments - r = self.radius * 1.4363 + r = self.radius # * 1.4363 for i in range(self.segments): angle = math.radians(i * angle_step) next_angle = math.radians((i + 1) * angle_step) diff --git a/simulators/ursina/ursina_mesh.py b/simulators/ursina/ursina_mesh.py index 82898f1874bea7fb03ba698ca8f1c3d0d384f628..7a78e36aa9cb1a0923f7194ee9b92bd028e6dd8e 100644 --- a/simulators/ursina/ursina_mesh.py +++ b/simulators/ursina/ursina_mesh.py @@ -212,7 +212,7 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al distance1 = (center_obj.planet.position - orbiting_obj.planet.position).length() # distance = calculate_distance(center_obj.position - orbiting_obj.position) # distance2 = distance * UrsinaConfig.SCALE_FACTOR * 0.695 # / center_obj.planet.scale_x # * 0.0125 - orbit_line = create_circle_line(parent=None, radius=distance1 * 0.695, position=center_obj.planet.position, + orbit_line = create_circle_line(parent=None, radius=distance1, position=center_obj.planet.position, thickness=thickness, color=line_color, alpha=alpha) orbit_line.rotation_x = 90