diff --git a/bodies/body.py b/bodies/body.py index 0fa85c1364ba9ffb50e11f743cfcb73a50fd9e6c..295808aabf177fca390cce9f2e7857822b51be21 100644 --- a/bodies/body.py +++ b/bodies/body.py @@ -327,6 +327,9 @@ class Body(metaclass=ABCMeta): self.__append_history(self.__his_acc, self.acceleration) # print(self.name, "his pos->", self.__his_pos) + def clear_his_position(self): + self.__his_pos.clear() + def his_position(self): """ 历史位置 diff --git a/common/system.py b/common/system.py index 1d620595670efb253260ca0a6b97e7d950db98af..f49fc6f70d387e94f044f796cac8734b272f4cc9 100644 --- a/common/system.py +++ b/common/system.py @@ -220,7 +220,11 @@ class System(object): positions = [] for body in valid_bodies: masses.append(body.mass) - positions.append(body.position * 1000) + position = body.position + if not isinstance(position, np.ndarray): + position = np.array(position) + position = position * 1000 + positions.append(position) accelerations = self.calculate_gravitational_accelerations(masses, positions) diff --git a/objs/obj.py b/objs/obj.py index d9b077a891873c5ccd9a9d380689a0b90084cf28..9154fc58f82ab7bc8b8f3d9b49f89c32388e99cf 100644 --- a/objs/obj.py +++ b/objs/obj.py @@ -316,6 +316,9 @@ class Obj(metaclass=ABCMeta): self.__append_history(self.__his_acc, self.acceleration) # print(self.name, "his pos->", self.__his_pos) + def clear_his_position(self): + self.__his_pos.clear() + def his_position(self): """ 历史位置 diff --git a/sim_scenes/featured/jupiter_moon_protects_earth.py b/sim_scenes/featured/jupiter_moon_protects_earth.py index bd4590c342b7f4b7efb07d68fa081cef8a0d8bdb..f00e0032a9133dadc23168da3ade3a325562fd87 100644 --- a/sim_scenes/featured/jupiter_moon_protects_earth.py +++ b/sim_scenes/featured/jupiter_moon_protects_earth.py @@ -36,8 +36,8 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): # 分别保存太阳碰撞次数、木星碰撞次数、地球碰撞次数、月球碰撞次数、木星保护次数、月球保护次数 self.colliding_count = [0, 0, 0, 0, 0, 0] self.sun = Sun(name="太阳", size_scale=0.85e2, show_trail=False) # 太阳放大 80 倍,距离保持不变 - self.jupiter = Jupiter(name="木星", size_scale=0.45e3, ignore_mass=True, show_trail=False) # 木星放大 600 倍,距离保持不变 - self.earth = Earth(name="地球", size_scale=2.5e3, ignore_mass=True, show_trail=False ) # 地球放大 2000 倍,距离保持不变 + self.jupiter = Jupiter(name="木星", size_scale=0.45e3, ignore_mass=False, show_trail=False) # 木星放大 600 倍,距离保持不变 + self.earth = Earth(name="地球", size_scale=2.5e3, ignore_mass=False, show_trail=False ) # 地球放大 2000 倍,距离保持不变 self.moon = Moon(name="月球", size_scale=3.5e3, # 月球球放大 3000 倍,为了较好的效果,地月距离要比实际大 init_position=[self.earth_moon_d, 0, AU], init_velocity=[0, 0, 0], @@ -58,7 +58,7 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): for i in range(comet_num): # 随机生成 comet_num 个石头 - comet = self.create_comet(i, gravity_only_for=[self.sun]) + comet = self.create_comet(i, gravity_only_for=[self.sun, self.earth, self.jupiter]) # comet = self.create_comet(i, gravity_only_for=[self.sun, self.jupiter, self.earth]) self.bodies.append(comet) self.comets.append(comet) @@ -248,8 +248,8 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): def camera_move(self, time_data): from ursina import camera - camera.position += camera.left * 0.01 - camera_look_at(self.sun) + camera.position += camera.left * 1 + camera_look_at(self.sun, rotation_z=0) def on_ready(self): from ursina import application, window @@ -264,7 +264,7 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): 0, "0.0%", 0, 0) camera_look_at(self.sun) - self.sky = create_sphere_sky(scale=8000) + self.sky = create_sphere_sky(scale=8000, texture="bg_pan2.jpg") self.sky.rotation_y = -180 self.sky.rotation_x = -20 # self.sky.rotation_z = -65 @@ -278,9 +278,9 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): # UrsinaConfig.trail_length = 1000 UrsinaConfig.trail_thickness_factor = 2 - for b in self.bodies: - if isinstance(b, Rock): - print("岩石大小", b.name, b.planet.scale_x) + # for b in self.bodies: + # if isinstance(b, Rock): + # print("岩石大小", b.name, b.planet.scale_x) if __name__ == '__main__': @@ -304,11 +304,12 @@ if __name__ == '__main__': # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- - ursina_run(sim.bodies, SECONDS_PER_MONTH / 2, - position=(AU, AU * 5, -AU * 5), + ursina_run(sim.bodies, SECONDS_PER_MONTH / 1, + # position=(AU, AU * 5, -AU * 5), + position=(0, 0, -AU * 6), cosmic_bg='', show_grid=False, # show_exit_button=False, - show_camera_info=False, + # show_camera_info=False, show_control_info=False, timer_enabled=True) diff --git a/simulators/ursina/entities/entity_utils.py b/simulators/ursina/entities/entity_utils.py index 1cd66760723f2311e0c0e1c4b4892f66b10fba31..92033d0f08014e58b4b2960d03c973d77cb46427 100644 --- a/simulators/ursina/entities/entity_utils.py +++ b/simulators/ursina/entities/entity_utils.py @@ -346,6 +346,7 @@ def clear_trails(parent): for entity, pos in parent.trails.items(): destroy(entity) parent.trails.clear() + parent.body.clear_his_position() if hasattr(parent, "trail_last_pos"): delattr(parent, "trail_last_pos") if hasattr(parent, "last_trail"):