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

太阳系三体模拟器

上级 da43f624
...@@ -58,7 +58,7 @@ class Antares(FixedStar): ...@@ -58,7 +58,7 @@ class Antares(FixedStar):
def __init__(self, name="心宿二A", mass=15.5 * MO, def __init__(self, name="心宿二A", mass=15.5 * MO,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
color=(249,198,83), color=(249, 198, 83),
texture="fixed_star.png", size_scale=1.0, distance_scale=1.0, texture="fixed_star.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.25, ignore_mass=False): rotation_speed=0.25, ignore_mass=False):
params = { params = {
...@@ -82,4 +82,4 @@ if __name__ == '__main__': ...@@ -82,4 +82,4 @@ if __name__ == '__main__':
fixed_star = Antares() fixed_star = Antares()
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=680) fixed_star.density_by_radius(num_sun_raduis=680)
\ No newline at end of file
...@@ -55,7 +55,7 @@ class Betelgeuse(FixedStar): ...@@ -55,7 +55,7 @@ class Betelgeuse(FixedStar):
def __init__(self, name="参宿四", mass=19 * MO, def __init__(self, name="参宿四", mass=19 * MO,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
color=(254,162,1), color=(254, 162, 1),
texture="fixed_star.png", size_scale=1.0, distance_scale=1.0, texture="fixed_star.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.24, ignore_mass=False): rotation_speed=0.24, ignore_mass=False):
params = { params = {
...@@ -78,4 +78,4 @@ if __name__ == '__main__': ...@@ -78,4 +78,4 @@ if __name__ == '__main__':
fixed_star = Betelgeuse() fixed_star = Betelgeuse()
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=1180) fixed_star.density_by_radius(num_sun_raduis=1180)
\ No newline at end of file
...@@ -48,7 +48,7 @@ class EtaCarinae(FixedStar): ...@@ -48,7 +48,7 @@ class EtaCarinae(FixedStar):
def __init__(self, name="海山二", mass=125 * MO, def __init__(self, name="海山二", mass=125 * MO,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
color=(111,140,255), color=(111, 140, 255),
texture="fixed_star.png", size_scale=1.0, distance_scale=1.0, texture="fixed_star.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.28, ignore_mass=False): rotation_speed=0.28, ignore_mass=False):
params = { params = {
...@@ -72,4 +72,3 @@ if __name__ == '__main__': ...@@ -72,4 +72,3 @@ if __name__ == '__main__':
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=278) fixed_star.density_by_radius(num_sun_raduis=278)
...@@ -47,11 +47,6 @@ class Pollux(FixedStar): ...@@ -47,11 +47,6 @@ class Pollux(FixedStar):
年龄 724[12] Myr 年龄 724[12] Myr
其他命名 其他命名
Beta Geminorum, 78 Geminorum, BD+28°1463, GCTP 1826.00, Gliese 286, HD 62509, HIP 37826, HR 2990, LFT 548, LHS 1945, LTT 12065, SAO 79666.[13] Beta Geminorum, 78 Geminorum, BD+28°1463, GCTP 1826.00, Gliese 286, HD 62509, HIP 37826, HR 2990, LFT 548, LHS 1945, LTT 12065, SAO 79666.[13]
------------------------ ------------------------
== 太阳参数 == == 太阳参数 ==
自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24) 自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24)
...@@ -85,4 +80,4 @@ if __name__ == '__main__': ...@@ -85,4 +80,4 @@ if __name__ == '__main__':
fixed_star = Pollux() fixed_star = Pollux()
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=8.8) fixed_star.density_by_radius(num_sun_raduis=8.8)
\ No newline at end of file
...@@ -65,12 +65,6 @@ class Procyon(FixedStar): ...@@ -65,12 +65,6 @@ class Procyon(FixedStar):
(secondary) 92.2° (secondary) 92.2°
其他命名 其他命名
Elgomaisa, Algomeysa, Antecanis, α Canis Minoris, 10 Canis Minoris,GCTP 1805.00, HR 2943, BD+05°1739, HD 61421, LHS 233, GJ 280, HIP 37279, SAO 115756.[12] Elgomaisa, Algomeysa, Antecanis, α Canis Minoris, 10 Canis Minoris,GCTP 1805.00, HR 2943, BD+05°1739, HD 61421, LHS 233, GJ 280, HIP 37279, SAO 115756.[12]
------------------------ ------------------------
== 太阳参数 == == 太阳参数 ==
自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24) 自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24)
...@@ -104,4 +98,4 @@ if __name__ == '__main__': ...@@ -104,4 +98,4 @@ if __name__ == '__main__':
fixed_star = Procyon() fixed_star = Procyon()
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=2.05) fixed_star.density_by_radius(num_sun_raduis=2.05)
\ No newline at end of file
...@@ -51,7 +51,7 @@ class Rigel(FixedStar): ...@@ -51,7 +51,7 @@ class Rigel(FixedStar):
def __init__(self, name="参宿七", mass=18 * MO, def __init__(self, name="参宿七", mass=18 * MO,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
color=(141,213,227), color=(141, 213, 227),
texture="fixed_star.png", size_scale=1.0, distance_scale=1.0, texture="fixed_star.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.33, ignore_mass=False): rotation_speed=0.33, ignore_mass=False):
params = { params = {
......
...@@ -52,7 +52,7 @@ class VYCanisMajoris(FixedStar): ...@@ -52,7 +52,7 @@ class VYCanisMajoris(FixedStar):
def __init__(self, name="大犬座VY", mass=30 * MO, def __init__(self, name="大犬座VY", mass=30 * MO,
init_position=[0, 0, 0], init_position=[0, 0, 0],
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
color=(234,90,65), color=(234, 90, 65),
texture="fixed_star.png", size_scale=1.0, distance_scale=1.0, texture="fixed_star.png", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.23, ignore_mass=False): rotation_speed=0.23, ignore_mass=False):
params = { params = {
...@@ -66,7 +66,9 @@ class VYCanisMajoris(FixedStar): ...@@ -66,7 +66,9 @@ class VYCanisMajoris(FixedStar):
"size_scale": size_scale, "size_scale": size_scale,
"distance_scale": distance_scale, "distance_scale": distance_scale,
"rotation_speed": rotation_speed, "rotation_speed": rotation_speed,
"ignore_mass": ignore_mass "ignore_mass": ignore_mass,
"texture_bright": 1,
"texture_contrast": 5
} }
super().__init__(**params) super().__init__(**params)
...@@ -75,4 +77,4 @@ if __name__ == '__main__': ...@@ -75,4 +77,4 @@ if __name__ == '__main__':
fixed_star = VYCanisMajoris() fixed_star = VYCanisMajoris()
print(fixed_star) print(fixed_star)
fixed_star.compare_with_sun() fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=1400) fixed_star.density_by_radius(num_sun_raduis=1400)
\ No newline at end of file
...@@ -22,20 +22,20 @@ if __name__ == '__main__': ...@@ -22,20 +22,20 @@ if __name__ == '__main__':
bodies = [ bodies = [
Earth(size_scale=SIZE_SCALE, ignore_mass=True), Earth(size_scale=SIZE_SCALE, ignore_mass=True),
Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳 Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳
Sirius(size_scale=SIZE_SCALE, ignore_mass=True), # 天狼星A 质量倍数 2.02 半径倍数 1.71 Sirius(size_scale=SIZE_SCALE, ignore_mass=True), # 天狼星A 质量倍数 2.02 半径倍数 1.71
# Bellatrix(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿五 质量倍数 8.6 半径倍数 5.75 # Bellatrix(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿五 质量倍数 8.6 半径倍数 5.75
Alcyone(size_scale=SIZE_SCALE, ignore_mass=True), # 昴宿六 质量倍数 6 半径倍数 9.5 Alcyone(size_scale=SIZE_SCALE, ignore_mass=True), # 昴宿六 质量倍数 6 半径倍数 9.5
Arcturus(size_scale=SIZE_SCALE, ignore_mass=True), # 大角星 质量倍数 1.1 半径倍数 25.7 Arcturus(size_scale=SIZE_SCALE, ignore_mass=True), # 大角星 质量倍数 1.1 半径倍数 25.7
Aldebaran(size_scale=SIZE_SCALE, ignore_mass=True), # 毕宿五 质量倍数 1.16 半径倍数 44.13 Aldebaran(size_scale=SIZE_SCALE, ignore_mass=True), # 毕宿五 质量倍数 1.16 半径倍数 44.13
Rigel(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿七 质量倍数 18 半径倍数 78 Rigel(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿七 质量倍数 18 半径倍数 78
# YCanumVenaticorum(size_scale=SIZE_SCALE, ignore_mass=True), # 猎犬座Y 质量倍数 3.0 半径倍数 215 # YCanumVenaticorum(size_scale=SIZE_SCALE, ignore_mass=True), # 猎犬座Y 质量倍数 3.0 半径倍数 215
EtaCarinae(size_scale=SIZE_SCALE, ignore_mass=True), # 海山二 质量倍数 125 半径倍数 278 EtaCarinae(size_scale=SIZE_SCALE, ignore_mass=True), # 海山二 质量倍数 125 半径倍数 278
# Antares(size_scale=SIZE_SCALE, ignore_mass=True), # 心宿二 质量倍数 15 半径倍数 680 # Antares(size_scale=SIZE_SCALE, ignore_mass=True), # 心宿二 质量倍数 15 半径倍数 680
CarinaeV382(size_scale=SIZE_SCALE, ignore_mass=True), # 船底座V382 质量倍数 39 半径倍数 747 CarinaeV382(size_scale=SIZE_SCALE, ignore_mass=True), # 船底座V382 质量倍数 39 半径倍数 747
# Betelgeuse(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿四 质量倍数 19 半径倍数 1180 # Betelgeuse(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿四 质量倍数 19 半径倍数 1180
VYCanisMajoris(size_scale=SIZE_SCALE, ignore_mass=True), # 大犬座VY 质量倍数 30 半径倍数 1400 VYCanisMajoris(size_scale=SIZE_SCALE, ignore_mass=True), # 大犬座VY 质量倍数 30 半径倍数 1400
# UYScuti(size_scale=SIZE_SCALE, ignore_mass=True), # 盾牌座 UY 质量倍数 10 半径倍数 1708 # UYScuti(size_scale=SIZE_SCALE, ignore_mass=True), # 盾牌座 UY 质量倍数 10 半径倍数 1708
Stephenson_2_18(size_scale=SIZE_SCALE, ignore_mass=True) # 史蒂文森2-18 质量倍数 40.0 半径倍数 2150 Stephenson_2_18(size_scale=SIZE_SCALE, ignore_mass=True) # 史蒂文森2-18 质量倍数 40.0 半径倍数 2150
] ]
distance_sum = 0 distance_sum = 0
for idx, body in enumerate(bodies): for idx, body in enumerate(bodies):
...@@ -54,4 +54,5 @@ if __name__ == '__main__': ...@@ -54,4 +54,5 @@ if __name__ == '__main__':
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU, -AU / 500), show_name=True) ursina_run(bodies, SECONDS_PER_WEEK, position=(0, AU, -AU / 500),
show_name=True, bg_music="../sounds/universe_03.mp3")
...@@ -60,6 +60,7 @@ def ursina_run(bodies, ...@@ -60,6 +60,7 @@ def ursina_run(bodies,
# view_azimuth=0, # view_azimuth=0,
light=True, light=True,
cosmic_bg=None, cosmic_bg=None,
bg_music=None,
show_grid=True, show_grid=True,
show_trail=False, show_trail=False,
show_name=False, show_name=False,
...@@ -143,7 +144,7 @@ def ursina_run(bodies, ...@@ -143,7 +144,7 @@ def ursina_run(bodies,
sys.modules["__main__"].update = callback_update sys.modules["__main__"].update = callback_update
if show_trail: if show_trail:
UrsinaConfig.show_trail = show_trail UrsinaConfig.show_trail = show_trail
simulator.run(dt, light=light, cosmic_bg=cosmic_bg, show_grid=show_grid) simulator.run(dt, light=light, cosmic_bg=cosmic_bg, show_grid=show_grid, bg_music=bg_music)
def mpl_run(bodies, dt=SECONDS_PER_WEEK, gif_file_name=None, gif_max_frame=200): def mpl_run(bodies, dt=SECONDS_PER_WEEK, gif_file_name=None, gif_max_frame=200):
......
...@@ -275,8 +275,27 @@ class UrsinaSimulator(Simulator): ...@@ -275,8 +275,27 @@ class UrsinaSimulator(Simulator):
EditorCamera(ignore_paused=True) EditorCamera(ignore_paused=True)
# 防止打开中文输入法 # 防止打开中文输入法
# self.switch_to_english_input_method() # self.switch_to_english_input_method()
audio = Audio('../sounds/universe_04.mp3', pitch=1, loop=True, autoplay=True) # file: 指定音乐文件的路径
audio.volume = 0.3 # loop: 是否循环播放,默认为 True
# autoplay: 是否自动播放,默认为 True
# volume: 音量大小,取值范围为 0.0 到 1.0,默认为 1.0
# pitch: 音调,取值范围为 0.5 到 2.0,默认为 1.0
# time: 指定音乐从何处开始播放,单位为秒,默认为 0.0
# stop_when_done: 音乐播放完毕后是否停止播放,默认为 True
if "bg_music" in kwargs:
bg_music = kwargs["bg_music"]
elif "background_music" in kwargs:
bg_music = kwargs["background_music"]
else:
bg_music = None
if bg_music is None:
bg_music = "../sounds/universe_04.mp3"
if os.path.exists(bg_music):
audio = Audio(bg_music, pitch=1, loop=True, autoplay=True)
audio.volume = 0.3
self.app.run() self.app.run()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册