提交 6a737b91 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 d2e2bc71
...@@ -346,6 +346,18 @@ def get_init_pos_vels(): ...@@ -346,6 +346,18 @@ def get_init_pos_vels():
return init_pos_vels return init_pos_vels
def init_bodies_pos_vels(bodies):
# 获取模拟的初始位置和速度
init_pos_vels = get_init_pos_vels()
for body in bodies:
pos_vels = init_pos_vels.get(type(body).__name__.lower(), None)
if pos_vels is None:
continue
body.init_position = pos_vels['pos']
body.init_velocity = pos_vels['vel']
if __name__ == '__main__': if __name__ == '__main__':
from astropy.time import Time # 时间 from astropy.time import Time # 时间
......
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
# title :天狼星进入太阳系场景模拟 # title :天狼星进入太阳系场景模拟
# description :天狼星进入太阳系场景模拟 # description :天狼星把土星带走了
# author :Python超人 # author :Python超人
# date :2023-02-11 # date :2023-02-11
# link :https://gitcode.net/pythoncr/ # link :https://gitcode.net/pythoncr/
...@@ -8,17 +8,14 @@ ...@@ -8,17 +8,14 @@
# ============================================================================== # ==============================================================================
from bodies import Sirius, Sun, Mercury, Venus, Earth, \ from bodies import Sirius, Sun, Mercury, Venus, Earth, \
Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Moon, Asteroids Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Moon, Asteroids
from common.celestial_data_service import init_bodies_pos_vels
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_MONTH, AU from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_MONTH, AU
from sim_scenes.func import mayavi_run, ursina_run from sim_scenes.func import ursina_run, create_sphere_sky
from ursina import camera, application
from simulators.ursina.ursina_event import UrsinaEvent
if __name__ == '__main__': if __name__ == '__main__':
# 八大行星:木星(♃)、土星(♄)、天王星(♅)、海王星(♆)、地球(⊕)、金星(♀)、火星(♂)、水星(☿)
# 排列顺序
# 1、体积:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 = 1330:745:65:60:1:0.86:0.15:0.056
# 2、质量:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 = 318:95:14.53:17.15:1:0.8:0.11:0.0553
# 3、离太阳从近到远的顺序:水星、金星、地球、火星、木星、土星、天王星、海王星
# =====================================================================
# 以下展示的效果为太阳系真实的距离
# 由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大 # 由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大
sun = Sun(name="太阳", sun = Sun(name="太阳",
init_velocity=[0, 2, 0], init_velocity=[0, 2, 0],
...@@ -43,9 +40,29 @@ if __name__ == '__main__': ...@@ -43,9 +40,29 @@ if __name__ == '__main__':
Pluto(name="冥王星", size_scale=10e3), # 冥王星放大 10000 倍,距离保持不变(从太阳系的行星中排除) Pluto(name="冥王星", size_scale=10e3), # 冥王星放大 10000 倍,距离保持不变(从太阳系的行星中排除)
] ]
init_bodies_pos_vels(bodies)
def on_ready():
"""
事件绑定后,模拟器运行前会触发
@return:
"""
# 创建天空
# camera.clip_plane_near = 0.1
camera.clip_plane_far = 1000000
create_sphere_sky(scale=200000)
application.time_scale = 5
# 运行前会触发 on_ready
UrsinaEvent.on_ready_subscription(on_ready)
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_MONTH, position=(0, 2 * AU, -11 * AU), ursina_run(bodies, SECONDS_PER_MONTH,
bg_music="sounds/interstellar.mp3") position=(0, 2 * AU, -11 * AU),
cosmic_bg='',
show_grid=False,
# bg_music="sounds/interstellar.mp3"
bg_music='sounds/no_glory.mp3',
)
...@@ -11,7 +11,7 @@ import time ...@@ -11,7 +11,7 @@ import time
from ursina import camera, application from ursina import camera, application
from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
from common.celestial_data_service import get_init_pos_vels from common.celestial_data_service import get_init_pos_vels, init_bodies_pos_vels
from common.consts import SECONDS_PER_WEEK, AU from common.consts import SECONDS_PER_WEEK, AU
from objs import QuadObj, CircleObj, Obj from objs import QuadObj, CircleObj, Obj
from sim_scenes.func import camera_look_at, two_bodies_colliding from sim_scenes.func import camera_look_at, two_bodies_colliding
...@@ -44,15 +44,16 @@ class TwoWayFoilSim: ...@@ -44,15 +44,16 @@ class TwoWayFoilSim:
] ]
# endregion # endregion
# 获取模拟的初始位置和速度 init_bodies_pos_vels(self.bodies)
init_pos_vels = get_init_pos_vels() # # 获取模拟的初始位置和速度
# init_pos_vels = get_init_pos_vels()
for body in self.bodies: #
pos_vels = init_pos_vels.get(type(body).__name__.lower(), None) # for body in self.bodies:
if pos_vels is None: # pos_vels = init_pos_vels.get(type(body).__name__.lower(), None)
continue # if pos_vels is None:
body.init_position = pos_vels['pos'] # continue
body.init_velocity = pos_vels['vel'] # body.init_position = pos_vels['pos']
# body.init_velocity = pos_vels['vel']
def build_two_way_foil(self): def build_two_way_foil(self):
""" """
......
...@@ -11,7 +11,7 @@ import time ...@@ -11,7 +11,7 @@ import time
from ursina import camera, application from ursina import camera, application
from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
from common.celestial_data_service import get_init_pos_vels from common.celestial_data_service import get_init_pos_vels, init_bodies_pos_vels
from common.consts import SECONDS_PER_WEEK, AU from common.consts import SECONDS_PER_WEEK, AU
from objs import QuadObj, CircleObj, Obj from objs import QuadObj, CircleObj, Obj
from sim_scenes.func import camera_look_at, two_bodies_colliding from sim_scenes.func import camera_look_at, two_bodies_colliding
...@@ -44,15 +44,16 @@ class TwoWayFoilSim: ...@@ -44,15 +44,16 @@ class TwoWayFoilSim:
] ]
# endregion # endregion
# 获取模拟的初始位置和速度 init_bodies_pos_vels(self.bodies)
init_pos_vels = get_init_pos_vels() # # 获取模拟的初始位置和速度
# init_pos_vels = get_init_pos_vels()
for body in self.bodies: #
pos_vels = init_pos_vels.get(type(body).__name__.lower(), None) # for body in self.bodies:
if pos_vels is None: # pos_vels = init_pos_vels.get(type(body).__name__.lower(), None)
continue # if pos_vels is None:
body.init_position = pos_vels['pos'] # continue
body.init_velocity = pos_vels['vel'] # body.init_position = pos_vels['pos']
# body.init_velocity = pos_vels['vel']
def build_two_way_foil(self): def build_two_way_foil(self):
""" """
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册