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

Python超人-宇宙模拟器

上级 c973384b
......@@ -9,16 +9,16 @@
from bodies import Sun, Earth, Sirius, Rigel, Bellatrix, Alcyone, Antares, Arcturus, Aldebaran, Betelgeuse
from bodies import EtaCarinae, YCanumVenaticorum, VYCanisMajoris, UYScuti, CarinaeV382, Stephenson_2_18
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_MONTH, SECONDS_PER_YEAR, SECONDS_PER_DAY
from sim_scenes.func import mayavi_run, mpl_run, ursina_run
from sim_scenes.func import ursina_run
from bodies.body import Body, AU
if __name__ == '__main__':
"""
恒星演示
"""
# 构建两个天体对象(太阳、地球)
D = 5e5
SIZE_SCALE = 0.5
# 构建恒星天体对象
D = 5e5 # 基本距离单位:km(随意赋值)
SIZE_SCALE = 0.5 # 所有天体尺寸缩放保持一致
bodies = [
Earth(size_scale=SIZE_SCALE, ignore_mass=True),
Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳
......@@ -38,21 +38,24 @@ if __name__ == '__main__':
Stephenson_2_18(size_scale=SIZE_SCALE, ignore_mass=True) # 史蒂文森2-18 质量倍数 40.0 半径倍数 2150
]
distance_sum = 0
# 循环为每个恒星的初始位置进行赋值,方便演示
for idx, body in enumerate(bodies):
body.rotation_speed /= 10
body.rotation_speed /= 10 # 恒星的旋转速度减小10倍
if body.is_fixed_star:
body.light_on = False # 关闭灯光效果,只有太阳对地球有灯光效果
if idx == 0:
body.light_on = False # 关闭灯光效果
if idx == 0: # 这是地球
d = 0
else:
d = pow((body.raduis + bodies[idx - 1].raduis) * SIZE_SCALE, 1.0) * 1.1
# d = (body.diameter + bodies[idx - 1].diameter) * SIZE_SCALE * 1.1 + D
# 所有天体的初始速度为 0
body.init_velocity = [0, 0, 0]
# 所有天体的初始位置进行赋值
body.init_position = [-(distance_sum + d), AU, body.raduis * SIZE_SCALE]
distance_sum += d
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU, -AU / 500),
# position = (左-右+、上+下-、前+后-)
ursina_run(bodies, SECONDS_PER_WEEK,
position=(0, AU, -AU / 500),
show_name=True, bg_music="sounds/universe_03.mp3")
......@@ -9,16 +9,16 @@
from bodies import Sun, Earth, Sirius, Rigel, Bellatrix, Alcyone, Antares, Arcturus, Aldebaran, Betelgeuse
from bodies import EtaCarinae, YCanumVenaticorum, VYCanisMajoris, UYScuti, CarinaeV382, Stephenson_2_18
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_MONTH, SECONDS_PER_YEAR, SECONDS_PER_DAY
from sim_scenes.func import mayavi_run, mpl_run, ursina_run
from sim_scenes.func import ursina_run
from bodies.body import Body, AU
if __name__ == '__main__':
"""
恒星演示
"""
# 构建两个天体对象(太阳、地球)
D = 5e5
SIZE_SCALE = 0.5
# 构建恒星天体对象
D = 5e5 # 基本距离单位:km(随意赋值)
SIZE_SCALE = 0.5 # 所有天体尺寸缩放保持一致
bodies = [
Earth(size_scale=SIZE_SCALE, ignore_mass=True),
Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳
......@@ -38,25 +38,24 @@ if __name__ == '__main__':
Stephenson_2_18(size_scale=SIZE_SCALE, ignore_mass=True) # 史蒂文森2-18 质量倍数 40.0 半径倍数 2150
]
distance_sum = 0
# 循环为每个恒星的初始位置进行赋值,方便演示
for idx, body in enumerate(bodies):
body.rotation_speed /= 10
body.rotation_speed /= 10 # 恒星的旋转速度减小10倍
if body.is_fixed_star:
body.light_on = False # 关闭灯光效果,只有太阳对地球有灯光效果
if idx == 0:
body.light_on = False # 关闭灯光效果
if idx == 0: # 这是地球
d = 0
else:
# d = (body.raduis + bodies[idx - 1].raduis) * SIZE_SCALE
d = pow((body.raduis + bodies[idx - 1].raduis) * SIZE_SCALE, 1.0) * 1.1
# d = body.raduis * SIZE_SCALE
# d = (body.diameter + bodies[idx - 1].diameter) * SIZE_SCALE * 1.1 + D
# 所有天体的初始速度为 0
body.init_velocity = [0, 0, 0]
# body.init_position = [-(distance_sum + d), AU, body.raduis * SIZE_SCALE]
# d = (distance_sum + d)
body.init_position = [-body.raduis * SIZE_SCALE / 1.1, body.raduis * SIZE_SCALE/ 1.1, d]
# 所有天体的初始位置进行赋值
body.init_position = [-body.raduis * SIZE_SCALE / 1.1, body.raduis * SIZE_SCALE / 1.1, d]
distance_sum += d
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, 100000, -AU / 500),
# position = (左-右+、上+下-、前+后-)
ursina_run(bodies, SECONDS_PER_WEEK,
position=(0, 100000, -AU / 500),
show_name=True, bg_music="sounds/universe_03.mp3")
# -*- coding:utf-8 -*-
# title :太阳、球场景模拟
# description :太阳、球场景模拟
# title :太阳、戴森球场景模拟
# description :太阳、戴森球场景模拟
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
......@@ -8,7 +8,7 @@
# ==============================================================================
from bodies import Sun, DysenSphere
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, AU
from sim_scenes.func import mayavi_run, ursina_run
from sim_scenes.func import ursina_run
if __name__ == '__main__':
"""
......@@ -21,11 +21,8 @@ if __name__ == '__main__':
DysenSphere(size_scale=5e1, parent=sun), # 戴森球放大 50 倍
]
# 使用 mayavi 查看的运行效果
# mayavi_run(bodies, SECONDS_PER_WEEK, view_azimuth=-45)
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
# position = (左-右+, 上+下-, 前+后-)
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU / 4, -3 * AU),
bg_music="sounds/interstellar.mp3")
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册