提交 b6ffb3a5 编写于 作者: 我可以学Python吗's avatar 我可以学Python吗

太阳系三体模拟器

上级 da43f624
......@@ -58,7 +58,7 @@ class Antares(FixedStar):
def __init__(self, name="心宿二A", mass=15.5 * MO,
init_position=[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,
rotation_speed=0.25, ignore_mass=False):
params = {
......@@ -82,4 +82,4 @@ if __name__ == '__main__':
fixed_star = Antares()
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=680)
\ No newline at end of file
fixed_star.density_by_radius(num_sun_raduis=680)
......@@ -55,7 +55,7 @@ class Betelgeuse(FixedStar):
def __init__(self, name="参宿四", mass=19 * MO,
init_position=[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,
rotation_speed=0.24, ignore_mass=False):
params = {
......@@ -78,4 +78,4 @@ if __name__ == '__main__':
fixed_star = Betelgeuse()
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=1180)
\ No newline at end of file
fixed_star.density_by_radius(num_sun_raduis=1180)
......@@ -48,7 +48,7 @@ class EtaCarinae(FixedStar):
def __init__(self, name="海山二", mass=125 * MO,
init_position=[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,
rotation_speed=0.28, ignore_mass=False):
params = {
......@@ -72,4 +72,3 @@ if __name__ == '__main__':
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=278)
......@@ -47,11 +47,6 @@ class Pollux(FixedStar):
年龄 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]
------------------------
== 太阳参数 ==
自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24)
......@@ -85,4 +80,4 @@ if __name__ == '__main__':
fixed_star = Pollux()
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=8.8)
\ No newline at end of file
fixed_star.density_by_radius(num_sun_raduis=8.8)
......@@ -65,12 +65,6 @@ class Procyon(FixedStar):
(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]
------------------------
== 太阳参数 ==
自转周期: 24.47 地球日,自转角速度约为 0.6130 度/小时 = 360/(24.47*24)
......@@ -104,4 +98,4 @@ if __name__ == '__main__':
fixed_star = Procyon()
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=2.05)
\ No newline at end of file
fixed_star.density_by_radius(num_sun_raduis=2.05)
......@@ -51,7 +51,7 @@ class Rigel(FixedStar):
def __init__(self, name="参宿七", mass=18 * MO,
init_position=[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,
rotation_speed=0.33, ignore_mass=False):
params = {
......
......@@ -52,7 +52,7 @@ class VYCanisMajoris(FixedStar):
def __init__(self, name="大犬座VY", mass=30 * MO,
init_position=[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,
rotation_speed=0.23, ignore_mass=False):
params = {
......@@ -66,7 +66,9 @@ class VYCanisMajoris(FixedStar):
"size_scale": size_scale,
"distance_scale": distance_scale,
"rotation_speed": rotation_speed,
"ignore_mass": ignore_mass
"ignore_mass": ignore_mass,
"texture_bright": 1,
"texture_contrast": 5
}
super().__init__(**params)
......@@ -75,4 +77,4 @@ if __name__ == '__main__':
fixed_star = VYCanisMajoris()
print(fixed_star)
fixed_star.compare_with_sun()
fixed_star.density_by_radius(num_sun_raduis=1400)
\ No newline at end of file
fixed_star.density_by_radius(num_sun_raduis=1400)
......@@ -22,20 +22,20 @@ if __name__ == '__main__':
bodies = [
Earth(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
Alcyone(size_scale=SIZE_SCALE, ignore_mass=True), # 昴宿六 质量倍数 6 半径倍数 9.5
Arcturus(size_scale=SIZE_SCALE, ignore_mass=True), # 大角星 质量倍数 1.1 半径倍数 25.7
Aldebaran(size_scale=SIZE_SCALE, ignore_mass=True), # 毕宿五 质量倍数 1.16 半径倍数 44.13
Rigel(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿七 质量倍数 18 半径倍数 78
Alcyone(size_scale=SIZE_SCALE, ignore_mass=True), # 昴宿六 质量倍数 6 半径倍数 9.5
Arcturus(size_scale=SIZE_SCALE, ignore_mass=True), # 大角星 质量倍数 1.1 半径倍数 25.7
Aldebaran(size_scale=SIZE_SCALE, ignore_mass=True), # 毕宿五 质量倍数 1.16 半径倍数 44.13
Rigel(size_scale=SIZE_SCALE, ignore_mass=True), # 参宿七 质量倍数 18 半径倍数 78
# 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
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
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
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
for idx, body in enumerate(bodies):
......@@ -54,4 +54,5 @@ if __name__ == '__main__':
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# 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,
# view_azimuth=0,
light=True,
cosmic_bg=None,
bg_music=None,
show_grid=True,
show_trail=False,
show_name=False,
......@@ -143,7 +144,7 @@ def ursina_run(bodies,
sys.modules["__main__"].update = callback_update
if 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):
......
......@@ -275,8 +275,27 @@ class UrsinaSimulator(Simulator):
EditorCamera(ignore_paused=True)
# 防止打开中文输入法
# self.switch_to_english_input_method()
audio = Audio('../sounds/universe_04.mp3', pitch=1, loop=True, autoplay=True)
audio.volume = 0.3
# file: 指定音乐文件的路径
# 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()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册