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

Python超人-宇宙模拟器

上级 3ac5f7a4
from bodies.jupiter_system.io import Io
from bodies.jupiter_system.europa import Europa
from bodies.jupiter_system.ganymede import Ganymede
from bodies.jupiter_system.callisto import Callisto
# -*- coding:utf-8 -*-
# title :木卫一Io
# description :木卫一Io
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies.body import Body, AU
from bodies import Jupiter
class Callisto(Body):
"""
木卫四又称为卡里斯托(Callisto、英语发音:/kəˈlɪstoʊ/、希腊文:Καλλιστώ)是围绕木星运转的一颗卫星,由伽利略·伽利莱在1610年首次发现。木卫四是太阳系第三大卫星,也是木星第二大卫星,仅次于木卫三。
------------------------
中文名木卫四外文名Callisto分 类卫星
质 量1.08 x 10²³ 千克
直 径4800 km
自转周期16.7个地球日
公转周期16.7个地球日
公转轨道距木星1,883,000 千米
木卫四(左下角)、木星和木卫二(位于木星大红斑的左下方)。木卫四是距离木星最远的伽利略卫星,
其轨道距离木星约188万公里(是木星半径——7万1398公里——的26.3倍),比之距离木星次近的木卫三的轨道半径——107万公里——远得多。由于轨道半径较大,故其并不处于轨道共振状态,可能永远也不会处于这种状态。
 逃逸速度:
 天体质量: 1.08 x 10²³ kg
 平均密度: g/cm³ -> ✕10³ kg/m³
"""
def __init__(self, name="木卫四", mass=1.08e23,
init_position=[0, 0, 1880000],
init_velocity=[8.15, 0, 0],
texture="jupiter_callisto.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.25, ignore_mass=False,
trail_color=None, show_name=False,
gravity_only_for_jupiter=False):
"""
@param name: 木卫名称
@param mass: 木卫质量 (kg)
@param init_position: 初始位置 (km)
@param init_velocity: 初始速度 (km/s)
@param texture: 纹理图片
@param size_scale: 尺寸缩放
@param distance_scale: 距离缩放
@param rotation_speed: 自旋速度(度/小时)
@param ignore_mass: 是否忽略质量(如果为True,则不计算引力)
TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在天体物理学中是不严谨)
@param trail_color:木卫拖尾颜色(默认天体颜色)
@param show_name: 是否显示木卫名称
@param gravity_only_for_jupiter: 如果为True,则仅适用于木星的重力,与其他天体之间的重力不会受到影响
"""
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": 3.014e3,
"color": (162, 162, 162),
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"rotation_speed": rotation_speed,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name
}
super().__init__(**params)
self.gravity_only_for_jupiter = gravity_only_for_jupiter
def ignore_gravity_with(self, body):
"""
是否忽略指定天体的引力
@param body:
@return:
"""
if self.ignore_mass:
return True
if self.gravity_only_for_jupiter:
# 只对木星有引力,忽略其他的引力
if isinstance(body, Jupiter):
return False
else:
return False
return True
if __name__ == '__main__':
callisto = Callisto()
print(callisto)
# -*- coding:utf-8 -*-
# title :木卫一Io
# description :木卫一Io
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies.body import Body, AU
from bodies import Jupiter
class Europa(Body):
"""
木卫二(Europa,[juəˈrəupə],欧罗巴),在1610年被伽利略发现,是木星的第六颗已知卫星,是木星的第四大卫星,在伽利略发现的卫星中离木星第二近。
------------------------
中文名木卫二外文名Europa
IPA发现时间1610年1月
质 量4.80×10²² kg
平均密度3.014 g/cm³
直 径3138 km
逃逸速度2020m/s
公转周期3天半
表面积3.1×10⁷ km²
体 积1.593×10¹⁰ km³
重力加速度1.3 m/s²公转轨道
距离木星670,900 千米
轨道偏心率0.009赤道地区温度110K(-163 ℃)两极温度50K(-223 ℃)母行星木星
相关数据
发现者
伽利略
马里乌斯
轨道平均半径
671,034 km
离心率
0.0094
近地点
664,700 km (0.00444 AU)
远地点
677,300 km (0.00453 AU)
公转周期
3.551181041 d
轨道周长
4,216,100 km (0.028 AU)
最大公转速度
13.871 km/s
平均公转速度
13.741 km/s
最小公转速度
13.613 km/s
所属行星
天然卫星之一
平均直径
3,121.6 km
表面积
3.1×107 km²
体积
1.593×1010 km³
质量
4.80×1022 kg
平均密度
3.014g
表面重力
1.314 m/s2 (0.134 g)
逃逸速度
2.025 km/s
自转周期
与公转同步
赤道转速
zero
自转轴倾角
0.67
反照率
5.3
 逃逸速度: 2.02 km/s
 天体质量: 4.80×10²² kg
 平均密度: 3.014 g/cm³ -> 3.014✕10³ kg/m³
"""
def __init__(self, name="木卫二", mass=4.80e22,
init_position=[0, 0, 670900],
init_velocity=[13.741, 0, 0],
texture="jupiter_europa.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.25, ignore_mass=False,
trail_color=None, show_name=False,
gravity_only_for_jupiter=False):
"""
@param name: 木卫名称
@param mass: 木卫质量 (kg)
@param init_position: 初始位置 (km)
@param init_velocity: 初始速度 (km/s)
@param texture: 纹理图片
@param size_scale: 尺寸缩放
@param distance_scale: 距离缩放
@param rotation_speed: 自旋速度(度/小时)
@param ignore_mass: 是否忽略质量(如果为True,则不计算引力)
TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在天体物理学中是不严谨)
@param trail_color:木卫拖尾颜色(默认天体颜色)
@param show_name: 是否显示木卫名称
@param gravity_only_for_jupiter: 如果为True,则仅适用于木星的重力,与其他天体之间的重力不会受到影响
"""
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": 3.014e3,
"color": (162, 162, 162),
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"rotation_speed": rotation_speed,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name
}
super().__init__(**params)
self.gravity_only_for_jupiter = gravity_only_for_jupiter
def ignore_gravity_with(self, body):
"""
是否忽略指定天体的引力
@param body:
@return:
"""
if self.ignore_mass:
return True
if self.gravity_only_for_jupiter:
# 只对木星有引力,忽略其他的引力
if isinstance(body, Jupiter):
return False
else:
return False
return True
if __name__ == '__main__':
europa = Europa()
print(europa)
# -*- coding:utf-8 -*-
# title :木卫一Io
# description :木卫一Io
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies.body import Body, AU
from bodies import Jupiter
class Ganymede(Body):
"""
木卫三(盖尼米得,Ganymede,Γανυμήδης)是围绕木星运转的一颗卫星,公转周期约为7天。
按距离木星从近到远排序,在木星的所有卫星中排第七,在伽利略卫星中排第三。它与木卫二及木卫一保持着1:2:4的轨道共振关系。
------------------------
中文名木卫三外文名Ganymede,Γανυμήδης别 名盖尼米得分 类卫星发现时间1610年
平均密度1.936 g/cm³
直 径5262 km表
面温度-160 ℃
逃逸速度4 km/s反照率0.43视星等4.6 等自转周期7天离心率0.003
公转周期7天轨道倾角0.20 度表面积87000000km²
体 积7.6×10¹⁰ km³
表面引力1.428 m/s²
平均半径2632.1km大气成分氧气,原子氧,臭氧
轨道参数:
所属行星:木星
平均半径:1,070,400km(0.007155 AU)
离心率:0.003
近拱点:1,069,200km(0.007147 AU)
远拱点:1,071,600km(0.007163 AU)
公转周期:约7天
公转速度:平均10.880km/s
轨道倾角:2.21(黄道夹角)0.20(木星赤道夹角)
物理性质:
平均半径:2,631.2km(地球的0.413倍)
表面积:87.000,000平方千米(地球的0.12倍)
体积:7.6×10¹⁰(地球的0.0705倍)
质量:1.4819×10²³(地球的0.025倍)
平均密度:1.936g/cm
表面引力:1.428m/s
逃逸速度:3km/s
自转周期:7天
转轴倾角:0-0.33
反照率:0.43±0.02
表面温度:最高122K 平均99K 最低:22k
视星等∶5(oppositition)
大气压:极小
大气成份:氧气,原子氧,臭氧
 逃逸速度: 3 km/s
 天体质量: 1.4819×10²³ kg
 平均密度: 1.936 g/cm³ -> 1.936✕10³ kg/m³
"""
def __init__(self, name="木卫三", mass=1.4819e23,
init_position=[0, 0, 1069200],
init_velocity=[10.880, 0, 0],
texture="jupiter_ganymede.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.25, ignore_mass=False,
trail_color=None, show_name=False,
gravity_only_for_jupiter=False):
"""
@param name: 木卫名称
@param mass: 木卫质量 (kg)
@param init_position: 初始位置 (km)
@param init_velocity: 初始速度 (km/s)
@param texture: 纹理图片
@param size_scale: 尺寸缩放
@param distance_scale: 距离缩放
@param rotation_speed: 自旋速度(度/小时)
@param ignore_mass: 是否忽略质量(如果为True,则不计算引力)
TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在天体物理学中是不严谨)
@param trail_color:木卫拖尾颜色(默认天体颜色)
@param show_name: 是否显示木卫名称
@param gravity_only_for_jupiter: 如果为True,则仅适用于木星的重力,与其他天体之间的重力不会受到影响
"""
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": 1.936e3,
"color": (162, 162, 162),
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"rotation_speed": rotation_speed,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name
}
super().__init__(**params)
self.gravity_only_for_jupiter = gravity_only_for_jupiter
def ignore_gravity_with(self, body):
"""
是否忽略指定天体的引力
@param body:
@return:
"""
if self.ignore_mass:
return True
if self.gravity_only_for_jupiter:
# 只对木星有引力,忽略其他的引力
if isinstance(body, Jupiter):
return False
else:
return False
return True
if __name__ == '__main__':
ganymede = Ganymede()
print(ganymede)
# -*- coding:utf-8 -*-
# title :木卫一Io
# description :木卫一Io
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies.body import Body, AU
from bodies import Jupiter
class Io(Body):
"""
木卫一Io:即伊奥,是木星的四颗伽利略卫星中最靠近木星的一颗卫星
------------------------
中文名木卫一外文名Io
别 名伊奥分 类卫星发现者伽利略、马里乌斯发现时间1610年1月7日
质 量8.9319×10²² kg (0.015木星)
平均密度3.528 g/cm³
直 径3637.4 km
表面温度平均 130K ;最大 2000 K逃逸速度2.558 km/s反照率0.63 ± 0.02视星等5.02 (冲)表面积41,910,000 km² (0.082木星)
体 积2.53×10¹⁰ km³ (0.023木星)赤道旋转速率271 km/h
物理特征
大小: 3,660.0 × 3,637.4 × 3,630.6 km
赤道表面引力: 1.796 m/s²(0.183 g)
宇宙速度: 2.558 km/s
自转周期: 同步的
赤道旋转速率: 271 km/h
反照率: 0.63 ± 0.02
表面温度:平均 130K ;最大 2000 K
星等: 5.02 (冲)
轨道资料
近拱点: 420,000 km (0.002 807 AU)
远拱点: 423,400 km (0.002 830 AU)
平均轨道半径: 421,700 km (0.002 819 AU)
轨道离心率: 0.0041
轨道周期: 1.769 137 786 d (152 853.504 7 s, 42 h)
平均公转速度: 17.334 km/s
轨道倾角: 2.21° (对黄道)
0.05°(对木星的赤道)
卫星所属星球: 木星
 逃逸速度: 2.558 km/s
 天体质量: 8.9319×10²² kg
 平均密度: 3.528 g/cm³ -> 3.528✕10³ kg/m³
"""
def __init__(self, name="木卫一", mass=8.9319e22,
init_position=[0, 0, 420000],
init_velocity=[17.334, 0, 0],
texture="jupiter_io.jpg", size_scale=1.0, distance_scale=1.0,
rotation_speed=0.25, ignore_mass=False,
trail_color=None, show_name=False,
gravity_only_for_jupiter=False):
"""
@param name: 木卫名称
@param mass: 木卫质量 (kg)
@param init_position: 初始位置 (km)
@param init_velocity: 初始速度 (km/s)
@param texture: 纹理图片
@param size_scale: 尺寸缩放
@param distance_scale: 距离缩放
@param rotation_speed: 自旋速度(度/小时)
@param ignore_mass: 是否忽略质量(如果为True,则不计算引力)
TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在天体物理学中是不严谨)
@param trail_color:木卫拖尾颜色(默认天体颜色)
@param show_name: 是否显示木卫名称
@param gravity_only_for_earth: 如果为True,则仅适用于木星的重力,与其他天体之间的重力不会受到影响
"""
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": 3.528e3,
"color": (162, 162, 162),
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"rotation_speed": rotation_speed,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name
}
super().__init__(**params)
self.gravity_only_for_jupiter = gravity_only_for_jupiter
def ignore_gravity_with(self, body):
"""
是否忽略指定天体的引力
@param body:
@return:
"""
if self.ignore_mass:
return True
if self.gravity_only_for_jupiter:
# 只对木星有引力,忽略其他的引力
if isinstance(body, Jupiter):
return False
else:
return False
return True
if __name__ == '__main__':
io = Io()
print(io)
...@@ -15,7 +15,7 @@ if __name__ == '__main__': ...@@ -15,7 +15,7 @@ if __name__ == '__main__':
高清冥王星模拟运行 高清冥王星模拟运行
""" """
bodies = [ bodies = [
Pluto(texture="pluto_hd.jpg", Pluto(texture="pluto.png",
init_position=[0, 0, 0], init_velocity=[0, 0, 0], init_position=[0, 0, 0], init_velocity=[0, 0, 0],
size_scale=2, show_name=True) size_scale=2, show_name=True)
] ]
......
# -*- coding:utf-8 -*-
# title :太阳、地球、木星场景模拟
# description :太阳、地球、木星场景模拟
# author :Python超人
# date :2023-02-11
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies import Sun, Earth, Jupiter
from bodies.jupiter_system import Io, Europa, Ganymede, Callisto
from common.consts import SECONDS_PER_HOUR, SECONDS_PER_DAY, AU
from sim_scenes.func import mayavi_run, ursina_run
if __name__ == '__main__':
"""
太阳、地球、木星
"""
bodies = [
Io(size_scale=1e1),
Europa(size_scale=1e1),
Ganymede(size_scale=1e1),
Callisto(size_scale=1e1),
Jupiter(size_scale=1, init_velocity=[0, 0, 0], init_position=[0, 0, 0]), # 木星放大 500 倍,距离保持不变
]
# 使用 mayavi 查看的运行效果
# mayavi_run(bodies, SECONDS_PER_WEEK, view_azimuth=-45)
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_HOUR, position=(0, 0, -AU/100), show_trail=True, view_closely=True)
...@@ -8,43 +8,22 @@ ...@@ -8,43 +8,22 @@
# ============================================================================== # ==============================================================================
from bodies import Sun, Earth, Jupiter from bodies import Sun, Earth, Jupiter
from common.consts import SECONDS_PER_YEAR, SECONDS_PER_MONTH, AU from common.consts import SECONDS_PER_YEAR, SECONDS_PER_MONTH, AU
from sim_scenes.func import mayavi_run, ursina_run, camera_look_at from sim_scenes.func import mayavi_run, ursina_run
from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent
from simulators.ursina.ursina_mesh import create_line
from ursina import color
if __name__ == '__main__': if __name__ == '__main__':
""" """
太阳、地球、木星 太阳、地球、木星
""" """
bodies = [ bodies = [
Sun(size_scale=5e1), # 太阳放大 50 倍 Sun(size_scale=5e1), # 太阳放大 50 倍
Earth(size_scale=2e3, distance_scale=1), # 地球放大 2000 倍,距离保持不变 Earth(size_scale=2e3, distance_scale=1), # 地球放大 2000 倍,距离保持不变
Jupiter(size_scale=5e2, distance_scale=1), # 木星放大 500 倍,距离保持不变 Jupiter(size_scale=5e2, distance_scale=1), # 木星放大 500 倍,距离保持不变
] ]
sun, earth, jupiter = bodies[0], bodies[1], bodies[2]
def on_ready():
camera_look_at(sun, rotation_x=None, rotation_y=None, rotation_z=None)
UrsinaConfig.trail_length = 235
UrsinaConfig.trail_type = "line"
pass
def on_timer_changed(time_data: TimeData):
if int(time_data.total_days) % 10 == 0:
# print(time_data.total_hours)
create_line(from_pos=jupiter.planet.position, to_pos=earth.planet.position, color=color.white)
UrsinaEvent.on_ready_subscription(on_ready) # 使用 mayavi 查看的运行效果
UrsinaEvent.on_timer_changed_subscription(on_timer_changed) # mayavi_run(bodies, SECONDS_PER_WEEK, view_azimuth=-45)
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
ursina_run(bodies, SECONDS_PER_YEAR, position=(0, 20 * AU, 0), show_timer=True, show_trail=True) ursina_run(bodies, SECONDS_PER_MONTH, position=(0, AU, -4 * AU), show_trail=True)
textures/moon.jpg

157.8 KB | W: | H:

textures/moon.jpg

1.0 MB | W: | H:

textures/moon.jpg
textures/moon.jpg
textures/moon.jpg
textures/moon.jpg
  • 2-up
  • Swipe
  • Onion skin
textures/neptune.jpg

21.4 KB | W: | H:

textures/neptune.jpg

76.1 KB | W: | H:

textures/neptune.jpg
textures/neptune.jpg
textures/neptune.jpg
textures/neptune.jpg
  • 2-up
  • Swipe
  • Onion skin
textures/pluto.png

1.0 MB | W: | H:

textures/pluto.png

2.7 MB | W: | H:

textures/pluto.png
textures/pluto.png
textures/pluto.png
textures/pluto.png
  • 2-up
  • Swipe
  • Onion skin
textures/saturn.jpg

1.0 MB | W: | H:

textures/saturn.jpg

129.1 KB | W: | H:

textures/saturn.jpg
textures/saturn.jpg
textures/saturn.jpg
textures/saturn.jpg
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册