From 38029311c7bc5b3bc0a93622bb3828f33e1f3480 Mon Sep 17 00:00:00 2001 From: march3 Date: Wed, 5 Apr 2023 10:04:49 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sim_scenes/fiction/fixed_stars_1.py | 43 ++++++++++++++------------ sim_scenes/fiction/fixed_stars_2.py | 43 +++++++++++++------------- sim_scenes/fiction/sun_dysen_sphere.py | 11 +++---- 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/sim_scenes/fiction/fixed_stars_1.py b/sim_scenes/fiction/fixed_stars_1.py index 07c4319..21e8c41 100644 --- a/sim_scenes/fiction/fixed_stars_1.py +++ b/sim_scenes/fiction/fixed_stars_1.py @@ -9,50 +9,53 @@ 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), # 太阳 - Sirius(size_scale=SIZE_SCALE, ignore_mass=True), # 天狼星A 质量倍数 2.02 半径倍数 1.71 + Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳 + 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): - 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") diff --git a/sim_scenes/fiction/fixed_stars_2.py b/sim_scenes/fiction/fixed_stars_2.py index 2e418b2..c64c52a 100644 --- a/sim_scenes/fiction/fixed_stars_2.py +++ b/sim_scenes/fiction/fixed_stars_2.py @@ -9,54 +9,53 @@ 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), # 太阳 + Sun(size_scale=SIZE_SCALE, ignore_mass=True), # 太阳 # 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 - 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 - 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 - 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 # 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): - 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") diff --git a/sim_scenes/fiction/sun_dysen_sphere.py b/sim_scenes/fiction/sun_dysen_sphere.py index c460ea7..09d0573 100644 --- a/sim_scenes/fiction/sun_dysen_sphere.py +++ b/sim_scenes/fiction/sun_dysen_sphere.py @@ -1,6 +1,6 @@ # -*- 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") -- GitLab