Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
f5d53e79
宇宙模拟器
项目概览
Python_超人
/
宇宙模拟器
通知
19
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
宇宙模拟器
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f5d53e79
编写于
3月 25, 2024
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
3d734e8c
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
148 addition
and
5 deletion
+148
-5
common/celestial_data_service.py
common/celestial_data_service.py
+14
-0
引力世界/万物/太阳系.py
引力世界/万物/太阳系.py
+43
-2
引力世界/模拟场景.py
引力世界/模拟场景.py
+46
-3
引力世界/模拟实验室/太阳系/太阳系.py
引力世界/模拟实验室/太阳系/太阳系.py
+45
-0
未找到文件。
common/celestial_data_service.py
浏览文件 @
f5d53e79
...
@@ -439,6 +439,20 @@ def get_reality_orbit_points(body_name, start_time=None, days=365, segments=100,
...
@@ -439,6 +439,20 @@ def get_reality_orbit_points(body_name, start_time=None, days=365, segments=100,
else
:
else
:
s
=
int
(
round
(
days
/
segments
))
s
=
int
(
round
(
days
/
segments
))
body_dict
=
{
'地球'
:
'earth'
,
'太阳'
:
'sun'
,
'月球'
:
'moon'
,
'水星'
:
'mercury'
,
'金星'
:
'venus'
,
'地月'
:
'earth-moon-barycenter'
,
'火星'
:
'mars'
,
'木星'
:
'jupiter'
,
'土星'
:
'saturn'
,
'天王星'
:
'uranus'
,
'海王星'
:
'neptune'
}
body_name
=
body_dict
.
get
(
body_name
,
body_name
)
points
=
[]
points
=
[]
for
d
in
range
(
0
,
days
,
s
):
for
d
in
range
(
0
,
days
,
s
):
dt
=
d
+
start_time
dt
=
d
+
start_time
...
...
引力世界/万物/太阳系.py
浏览文件 @
f5d53e79
from
bodies
import
Sun
,
Earth
,
Moon
from
bodies
import
*
from
引力世界
import
造物主
from
引力世界
import
造物主
class
太阳
(
Sun
):
class
太阳
(
Sun
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
太阳
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
super
(
太阳
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
...
@@ -18,6 +17,48 @@ class 月球(Moon):
...
@@ -18,6 +17,48 @@ class 月球(Moon):
super
(
月球
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
super
(
月球
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
水星
(
Mercury
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
水星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
金星
(
Venus
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
金星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
火星
(
Mars
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
火星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
木星
(
Jupiter
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
木星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
土星
(
Saturn
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
土星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
天王星
(
Uranus
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
天王星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
class
海王星
(
Neptune
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放大小
=
1
):
super
(
海王星
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放大小
)
造物主
.
登记
([
'太阳'
,
'sun'
],
太阳
)
造物主
.
登记
([
'太阳'
,
'sun'
],
太阳
)
造物主
.
登记
([
'地球'
,
'earth'
],
地球
)
造物主
.
登记
([
'地球'
,
'earth'
],
地球
)
造物主
.
登记
([
'月球'
,
'moon'
],
月球
)
造物主
.
登记
([
'月球'
,
'moon'
],
月球
)
造物主
.
登记
([
'水星'
,
'mercury'
],
水星
)
造物主
.
登记
([
'金星'
,
'venus'
],
金星
)
造物主
.
登记
([
'火星'
,
'mars'
],
火星
)
造物主
.
登记
([
'木星'
,
'jupiter'
],
木星
)
造物主
.
登记
([
'土星'
,
'saturn'
],
土星
)
造物主
.
登记
([
'天王星'
,
'uranus'
],
天王星
)
造物主
.
登记
([
'海王星'
,
'neptune'
],
海王星
)
引力世界/模拟场景.py
浏览文件 @
f5d53e79
...
@@ -8,15 +8,18 @@
...
@@ -8,15 +8,18 @@
# ==============================================================================
# ==============================================================================
from
ursina
import
Ursina
,
camera
,
EditorCamera
,
Sky
,
Entity
,
load_model
,
color
from
ursina
import
Ursina
,
camera
,
EditorCamera
,
Sky
,
Entity
,
load_model
,
color
from
common.celestial_data_service
import
set_solar_system_celestial_position
,
conv_to_astropy_time
from
common.celestial_data_service
import
set_solar_system_celestial_position
,
conv_to_astropy_time
,
\
get_reality_orbit_points
from
common.consts
import
SECONDS_PER_DAY
,
AU
from
common.consts
import
SECONDS_PER_DAY
,
AU
from
bodies.body
import
Body
from
bodies.body
import
Body
from
bodies
import
*
from
sim_scenes.func
import
create_sphere_sky
,
ursina_run
from
sim_scenes.func
import
create_sphere_sky
,
ursina_run
from
sim_scenes.universe_sim_scenes
import
UniverseSimScenes
from
sim_scenes.universe_sim_scenes
import
UniverseSimScenes
from
simulators.ursina.entities.body_timer
import
TimeData
from
simulators.ursina.entities.body_timer
import
TimeData
from
simulators.ursina.ui.control_ui
import
ControlUI
from
simulators.ursina.ui.control_ui
import
ControlUI
from
simulators.ursina.ursina_config
import
UrsinaConfig
from
simulators.ursina.ursina_config
import
UrsinaConfig
from
simulators.ursina.ursina_event
import
UrsinaEvent
from
simulators.ursina.ursina_event
import
UrsinaEvent
from
simulators.ursina.ursina_mesh
import
create_orbit_by_points
from
引力世界.数据.天体数据
import
get_body_pos_vel
from
引力世界.数据.天体数据
import
get_body_pos_vel
...
@@ -49,8 +52,13 @@ class 模拟场景(UniverseSimScenes):
...
@@ -49,8 +52,13 @@ class 模拟场景(UniverseSimScenes):
def
on_ready
(
self
):
def
on_ready
(
self
):
from
ursina
import
application
from
ursina
import
application
,
window
# application.time_scale = 0.0001
# application.time_scale = 0.0001
window_size
=
(
int
(
1920
/
2
),
int
(
1079
/
2
))
UniverseSimScenes
.
set_window_size
(
window_size
,
False
)
window
.
borderless
=
False
window
.
position
=
(
20
,
20
)
# 运行前触发
# 运行前触发
self
.
sky
=
create_sphere_sky
(
texture
=
"bg_pan2.jpg"
,
scale
=
500000
,
rotation_x
=
20
,
rotation_y
=
160
,
rotation_z
=
20
)
self
.
sky
=
create_sphere_sky
(
texture
=
"bg_pan2.jpg"
,
scale
=
500000
,
rotation_x
=
20
,
rotation_y
=
160
,
rotation_z
=
20
)
...
@@ -95,6 +103,37 @@ class 太阳系模拟场景(模拟场景):
...
@@ -95,6 +103,37 @@ class 太阳系模拟场景(模拟场景):
def
__init__
(
self
):
def
__init__
(
self
):
self
.
造物
()
self
.
造物
()
def
create_orbit_line
(
self
,
center_body
,
body
,
start_time
,
alpha
=
0.2
):
import
math
if
not
hasattr
(
body
,
"orbital_days"
):
return
None
orbital_days
=
int
(
math
.
ceil
(
body
.
orbital_days
))
points
=
get_reality_orbit_points
(
type
(
body
).
__name__
.
lower
(),
start_time
=
start_time
,
days
=
orbital_days
,
segments
=
100
)
# print(points)
orbit_line
=
create_orbit_by_points
(
center_body
.
position
,
points
,
line_color
=
body
.
trail_color
,
alpha
=
alpha
)
return
orbit_line
def
create_orbit_lines
(
self
):
"""
创建太阳系天体的真实轨迹(太阳和哈雷彗星除外)
@return:
"""
self
.
orbit_lines
=
[]
for
body
in
self
.
bodies
:
if
isinstance
(
body
,
Sun
):
continue
if
isinstance
(
body
,
Earth
):
alpha
=
0.5
else
:
alpha
=
0.2
orbit_line
=
self
.
create_orbit_line
(
self
.
太阳
,
body
,
self
.
start_time
,
alpha
=
alpha
)
if
orbit_line
is
not
None
:
self
.
orbit_lines
.
append
(
orbit_line
)
def
set_bodies_position
(
self
,
time_data
:
TimeData
):
def
set_bodies_position
(
self
,
time_data
:
TimeData
):
"""
"""
设置天体的位置(包含速度和加速度的信息)
设置天体的位置(包含速度和加速度的信息)
...
@@ -104,6 +143,10 @@ class 太阳系模拟场景(模拟场景):
...
@@ -104,6 +143,10 @@ class 太阳系模拟场景(模拟场景):
t
=
self
.
start_time
+
time_data
.
total_days
t
=
self
.
start_time
+
time_data
.
total_days
set_solar_system_celestial_position
(
self
.
bodies
,
t
,
True
,
self
.
地月距离放大倍数
)
set_solar_system_celestial_position
(
self
.
bodies
,
t
,
True
,
self
.
地月距离放大倍数
)
def
on_ready
(
self
):
super
(
太阳系模拟场景
,
self
).
on_ready
()
self
.
create_orbit_lines
()
def
show_clock
(
self
,
time_data
):
def
show_clock
(
self
,
time_data
):
"""
"""
显示时钟
显示时钟
...
@@ -142,7 +185,7 @@ class 太阳系模拟场景(模拟场景):
...
@@ -142,7 +185,7 @@ class 太阳系模拟场景(模拟场景):
# 使用 ursina 查看的运行效果
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
# position = 左-右+、上+下-、前+后-
self
.
地月距离放大倍数
=
5
0
self
.
地月距离放大倍数
=
1
0
if
isinstance
(
运行时间
,
str
):
if
isinstance
(
运行时间
,
str
):
self
.
start_time
=
conv_to_astropy_time
(
运行时间
)
self
.
start_time
=
conv_to_astropy_time
(
运行时间
)
else
:
else
:
...
...
引力世界/模拟实验室/太阳系/太阳系.py
0 → 100644
浏览文件 @
f5d53e79
# -*- coding:utf-8 -*-
# title :太阳地球月球模拟
# description :太阳地球月球模拟
# date :2024-03-20
# python_version :3.9
# ==============================================================================
from
引力世界
import
造物主
from
引力世界.模拟场景
import
太阳系模拟场景
class
太阳系模拟
(
太阳系模拟场景
):
def
造物
(
self
):
太阳坐标
,
太阳速度
=
self
.
获取坐标和速度
(
'太阳'
)
地球坐标
,
地球速度
=
self
.
获取坐标和速度
(
'地球'
)
月球坐标
,
月球速度
=
self
.
获取坐标和速度
(
'月球'
)
水星坐标
,
水星速度
=
self
.
获取坐标和速度
(
'水星'
)
金星坐标
,
金星速度
=
self
.
获取坐标和速度
(
'金星'
)
火星坐标
,
火星速度
=
self
.
获取坐标和速度
(
'火星'
)
木星坐标
,
木星速度
=
self
.
获取坐标和速度
(
'木星'
)
土星坐标
,
土星速度
=
self
.
获取坐标和速度
(
'土星'
)
天王星坐标
,
天王星速度
=
self
.
获取坐标和速度
(
'天王星'
)
海王星坐标
,
海王星速度
=
self
.
获取坐标和速度
(
'海王星'
)
self
.
太阳
=
造物主
.
造物
(
名称
=
'太阳'
,
缩放大小
=
1e1
)
self
.
地球
=
造物主
.
造物
(
名称
=
'地球'
,
缩放大小
=
5.5e2
)
self
.
月球
=
造物主
.
造物
(
名称
=
'月球'
,
缩放大小
=
5e2
)
self
.
水星
=
造物主
.
造物
(
名称
=
'水星'
,
缩放大小
=
1e3
)
self
.
金星
=
造物主
.
造物
(
名称
=
'金星'
,
缩放大小
=
5e2
)
self
.
火星
=
造物主
.
造物
(
名称
=
'火星'
,
缩放大小
=
5e2
)
self
.
木星
=
造物主
.
造物
(
名称
=
'木星'
,
缩放大小
=
5e2
)
self
.
土星
=
造物主
.
造物
(
名称
=
'土星'
,
缩放大小
=
5e2
)
self
.
天王星
=
造物主
.
造物
(
名称
=
'天王星'
,
缩放大小
=
5e2
)
self
.
海王星
=
造物主
.
造物
(
名称
=
'海王星'
,
缩放大小
=
5e2
)
# print(self.太阳)
场景
=
太阳系模拟
()
# 场景.摄像机看向(场景.地球)
场景
.
运行
(
运行时间
=
'1982-09-24 00:00:00'
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录