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

Python超人-宇宙模拟器

上级 c973384b
......@@ -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")
......@@ -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")
# -*- 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.
先完成此消息的编辑!
想要评论请 注册