Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
22c9b106
宇宙模拟器
项目概览
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看板
提交
22c9b106
编写于
1月 22, 2024
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
7ff01617
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
119 addition
and
39 deletion
+119
-39
common/celestial_data_service.py
common/celestial_data_service.py
+39
-0
sim_lab/two_way_foil_lab.py
sim_lab/two_way_foil_lab.py
+2
-2
sim_scenes/featured/jupiter_moon_protects_earth.py
sim_scenes/featured/jupiter_moon_protects_earth.py
+1
-1
sim_scenes/featured/two_way_foil_sim.py
sim_scenes/featured/two_way_foil_sim.py
+77
-36
未找到文件。
common/celestial_data_service.py
浏览文件 @
22c9b106
...
@@ -363,6 +363,45 @@ def get_init_pos_vels():
...
@@ -363,6 +363,45 @@ def get_init_pos_vels():
return
init_pos_vels
return
init_pos_vels
def
get_init_pos_vels_2
():
init_pos_vels
=
{}
init_pos_vels
[
'sun'
]
=
{}
init_pos_vels
[
'sun'
][
'pos'
]
=
[
-
8885067.0000
,
0.0000
,
2311787.7500
]
init_pos_vels
[
'sun'
][
'vel'
]
=
[
-
0.0304
,
0.0000
,
-
0.0016
]
init_pos_vels
[
'mercury'
]
=
{}
init_pos_vels
[
'mercury'
][
'pos'
]
=
[
-
62266848.0000
,
0.0000
,
-
24917024.0000
]
init_pos_vels
[
'mercury'
][
'vel'
]
=
[
16.2605
,
0.0000
,
-
43.2059
]
init_pos_vels
[
'venus'
]
=
{}
init_pos_vels
[
'venus'
][
'pos'
]
=
[
72525272.0000
,
0.0000
,
83115816.0000
]
init_pos_vels
[
'venus'
][
'vel'
]
=
[
-
23.0332
,
0.0000
,
23.5375
]
init_pos_vels
[
'earth'
]
=
{}
init_pos_vels
[
'earth'
][
'pos'
]
=
[
93683544.0000
,
0.0000
,
-
103641144.0000
]
init_pos_vels
[
'earth'
][
'vel'
]
=
[
22.8265
,
0.0000
,
19.8364
]
init_pos_vels
[
'mars'
]
=
{}
init_pos_vels
[
'mars'
][
'pos'
]
=
[
-
74898024.0000
,
0.0000
,
-
211774608.0000
]
init_pos_vels
[
'mars'
][
'vel'
]
=
[
23.1957
,
0.0000
,
-
7.7939
]
init_pos_vels
[
'asteroids'
]
=
{}
init_pos_vels
[
'asteroids'
][
'pos'
]
=
[
0.0000
,
0.0000
,
0.0000
]
init_pos_vels
[
'asteroids'
][
'vel'
]
=
[
0.0000
,
0.0000
,
0.0000
]
init_pos_vels
[
'jupiter'
]
=
{}
init_pos_vels
[
'jupiter'
][
'pos'
]
=
[
-
2776470.5000
,
0.0000
,
-
768231616.0000
]
init_pos_vels
[
'jupiter'
][
'vel'
]
=
[
13.1263
,
0.0000
,
0.0694
]
init_pos_vels
[
'saturn'
]
=
{}
init_pos_vels
[
'saturn'
][
'pos'
]
=
[
907136000.0000
,
0.0000
,
-
1055790848.0000
]
init_pos_vels
[
'saturn'
][
'vel'
]
=
[
7.4217
,
0.0000
,
6.3457
]
init_pos_vels
[
'uranus'
]
=
{}
init_pos_vels
[
'uranus'
][
'pos'
]
=
[
-
2782867968.0000
,
0.0000
,
714746048.0000
]
init_pos_vels
[
'uranus'
][
'vel'
]
=
[
-
1.6953
,
0.0000
,
-
6.5996
]
init_pos_vels
[
'neptune'
]
=
{}
init_pos_vels
[
'neptune'
][
'pos'
]
=
[
-
2812751104.0000
,
0.0000
,
3651367424.0000
]
init_pos_vels
[
'neptune'
][
'vel'
]
=
[
-
4.3237
,
0.0000
,
-
3.2580
]
init_pos_vels
[
'pluto'
]
=
{}
init_pos_vels
[
'pluto'
][
'pos'
]
=
[
-
2529432576.0000
,
0.0000
,
5336828928.0000
]
init_pos_vels
[
'pluto'
][
'vel'
]
=
[
-
4.2408
,
0.0000
,
-
2.0510
]
return
init_pos_vels
def
init_bodies_pos_vels
(
bodies
):
def
init_bodies_pos_vels
(
bodies
):
# 获取模拟的初始位置和速度
# 获取模拟的初始位置和速度
init_pos_vels
=
get_init_pos_vels
()
init_pos_vels
=
get_init_pos_vels
()
...
...
sim_lab/two_way_foil_lab.py
浏览文件 @
22c9b106
...
@@ -278,8 +278,8 @@ if __name__ == '__main__':
...
@@ -278,8 +278,8 @@ if __name__ == '__main__':
# init_pos_vels['sun']['vel'] = [0.0093, 0.0037, 0.0014]
# init_pos_vels['sun']['vel'] = [0.0093, 0.0037, 0.0014]
# print(b.planet.position, b.three_dim.planet.position)
# print(b.planet.position, b.three_dim.planet.position)
#
print("----------------------------------------------")
print
(
"----------------------------------------------"
)
#
print(init_pos_vels_info)
print
(
init_pos_vels_info
)
# 订阅事件后,上面2个函数功能才会起作用
# 订阅事件后,上面2个函数功能才会起作用
...
...
sim_scenes/featured/jupiter_moon_protects_earth.py
浏览文件 @
22c9b106
...
@@ -233,7 +233,7 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes):
...
@@ -233,7 +233,7 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes):
exit
()
exit
()
self
.
text_panel
.
text
=
colliding_info
self
.
text_panel
.
text
=
colliding_info
self
.
camera_move
(
time_data
)
#
self.camera_move(time_data)
def
camera_move
(
self
,
time_data
):
def
camera_move
(
self
,
time_data
):
from
ursina
import
camera
from
ursina
import
camera
...
...
sim_scenes/featured/two_way_foil_sim.py
浏览文件 @
22c9b106
...
@@ -40,18 +40,20 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -40,18 +40,20 @@ class TwoWayFoilSim(UniverseSimScenes):
# region 构建太阳系
# region 构建太阳系
show_trail
=
True
show_trail
=
True
self
.
sun
=
Sun
(
size_scale
=
0.
6
e2
,
show_trail
=
show_trail
,
self
.
sun
=
Sun
(
size_scale
=
0.
8
e2
,
show_trail
=
show_trail
,
# color=(255, 250, 245),
# color=(255, 250, 245),
# texture="",
# texture="",
texture
=
"sun_light.jpg"
texture
=
"sun_light.jpg"
)
)
self
.
mercury
=
Mercury
(
size_scale
=
2e3
,
distance_scale
=
1.5
,
show_trail
=
show_trail
)
self
.
sun
.
glows
=
(
24
,
1.008
,
0.04
)
self
.
sun
.
set_resolution
(
200
)
self
.
mercury
=
Mercury
(
size_scale
=
2e3
,
distance_scale
=
1.6
,
show_trail
=
show_trail
)
self
.
venus
=
Venus
(
size_scale
=
2e3
,
distance_scale
=
1.5
,
show_trail
=
show_trail
)
self
.
venus
=
Venus
(
size_scale
=
2e3
,
distance_scale
=
1.5
,
show_trail
=
show_trail
)
self
.
earth
=
Earth
(
size_scale
=
2e3
,
distance_scale
=
1.5
,
rotate_angle
=
0
,
show_trail
=
show_trail
)
self
.
earth
=
Earth
(
size_scale
=
2e3
,
distance_scale
=
1.5
,
rotate_angle
=
0
,
show_trail
=
show_trail
)
self
.
mars
=
Mars
(
size_scale
=
2e3
,
distance_scale
=
1.4
,
show_trail
=
show_trail
)
self
.
mars
=
Mars
(
size_scale
=
2e3
,
distance_scale
=
1.4
,
show_trail
=
show_trail
)
self
.
jupiter
=
Jupiter
(
size_scale
=
0.3e3
,
distance_scale
=
0.7
2
,
show_trail
=
show_trail
)
self
.
jupiter
=
Jupiter
(
size_scale
=
0.3e3
,
distance_scale
=
0.7
,
show_trail
=
show_trail
)
self
.
saturn
=
Saturn
(
size_scale
=
0.3e3
,
distance_scale
=
0.52
,
show_trail
=
show_trail
)
self
.
saturn
=
Saturn
(
size_scale
=
0.3e3
,
distance_scale
=
0.52
,
show_trail
=
show_trail
)
self
.
uranus
=
Uranus
(
size_scale
=
0.8e3
,
distance_scale
=
0.3
3
,
show_trail
=
show_trail
)
self
.
uranus
=
Uranus
(
size_scale
=
0.8e3
,
distance_scale
=
0.3
4
,
show_trail
=
show_trail
)
self
.
neptune
=
Neptune
(
size_scale
=
0.8e3
,
distance_scale
=
0.25
,
show_trail
=
show_trail
)
self
.
neptune
=
Neptune
(
size_scale
=
0.8e3
,
distance_scale
=
0.25
,
show_trail
=
show_trail
)
self
.
pluto
=
Pluto
(
size_scale
=
1e4
,
distance_scale
=
0.23
,
show_trail
=
show_trail
)
self
.
pluto
=
Pluto
(
size_scale
=
1e4
,
distance_scale
=
0.23
,
show_trail
=
show_trail
)
self
.
bodies
=
[
self
.
bodies
=
[
...
@@ -68,7 +70,7 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -68,7 +70,7 @@ class TwoWayFoilSim(UniverseSimScenes):
]
]
self
.
two_way_foil_dt_factor
=
1
self
.
two_way_foil_dt_factor
=
1
self
.
sun
.
two_way_foil_dt
=
0.00
3
*
self
.
two_way_foil_dt_factor
# self.sun.two_way_foil_dt = 0.
3 * self.two_way_foil_dt_factor
self
.
saturn
.
two_way_foil_dt
=
0.005
*
self
.
two_way_foil_dt_factor
self
.
saturn
.
two_way_foil_dt
=
0.005
*
self
.
two_way_foil_dt_factor
self
.
uranus
.
two_way_foil_dt
=
0.002
*
self
.
two_way_foil_dt_factor
self
.
uranus
.
two_way_foil_dt
=
0.002
*
self
.
two_way_foil_dt_factor
...
@@ -89,7 +91,7 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -89,7 +91,7 @@ class TwoWayFoilSim(UniverseSimScenes):
"""
"""
from
ursina
import
color
from
ursina
import
color
# 创建天空
# 创建天空
create_sphere_sky
(
scale
=
50000
,
rotation_x
=
200
,
rotation_y
=
None
,
rotation_z
=
45
)
create_sphere_sky
(
texture
=
"bg_pan2.jpg"
,
scale
=
50000
,
rotation_x
=
200
,
rotation_y
=
None
,
rotation_z
=
45
)
# UrsinaConfig.trail_type = "curve_line"
# UrsinaConfig.trail_type = "curve_line"
# UrsinaConfig.trail_length = 300
# UrsinaConfig.trail_length = 300
UrsinaConfig
.
trail_type
=
"line"
UrsinaConfig
.
trail_type
=
"line"
...
@@ -114,7 +116,7 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -114,7 +116,7 @@ class TwoWayFoilSim(UniverseSimScenes):
self
.
two_way_foil
=
QuadObj
(
texture
=
'two_way_foil.png'
,
self
.
two_way_foil
=
QuadObj
(
texture
=
'two_way_foil.png'
,
# size_scale=4e7,
# size_scale=4e7,
size_scale
=
1e6
,
size_scale
=
1e6
,
init_velocity
=
[
0
,
-
50
,
60
],
init_velocity
=
[
0
,
-
50
*
5
,
60
*
5
],
init_position
=
[
0
,
5
*
AU
,
-
6
*
AU
])
\
init_position
=
[
0
,
5
*
AU
,
-
6
*
AU
])
\
.
set_light_disable
(
True
)
# .set_ignore_gravity(False)
.
set_light_disable
(
True
)
# .set_ignore_gravity(False)
# 不断扩展的圆形二向箔
# 不断扩展的圆形二向箔
...
@@ -143,28 +145,44 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -143,28 +145,44 @@ class TwoWayFoilSim(UniverseSimScenes):
# 移动的信息:
# 移动的信息:
# 按坐标系方向移动 x:右+左-, y:升+降-, z:前+(接近太阳)后-(远离太阳)
# 按坐标系方向移动 x:右+左-, y:升+降-, z:前+(接近太阳)后-(远离太阳)
# 以摄像机视角移动 f:前 b:后 l:左 r:右 u:上 d:下
# 以摄像机视角移动 f:前 b:后 l:左 r:右 u:上 d:下
(
0
,
{
"f"
:
5.
2
}),
(
0
,
{
"f"
:
5.
758
}),
# (1983, {"to": {"ct_id": 1, "t": 10}}),
# (1983, {"to": {"ct_id": 1, "t": 10}}),
(
10
,
{}),
(
11
,
{
"f"
:
1.8
}),
(
12
,
{
"f"
:
0.2
}),
(
14
,
{
"f"
:
2
}),
(
15
,
{
"f"
:
0.3
}),
(
18
,
{
"f"
:
2
}),
(
18
,
{
"f"
:
0.4
}),
(
25
,
{
"f"
:
1
}),
(
28
,
{
"f"
:
0.2
}),
# (30, {"f": 0.5}),
# (30, {"f": 0.5}),
# (40, {"f": 0.6}),
# (40, {"f": 0.6}),
(
160
,
{
"b"
:
2
}),
(
33
,
{
"b"
:
2
}),
(
1988
,
{
"y"
:
-
3
,
"z"
:
-
12
}),
(
50
,
{
"f"
:
0.2
}),
(
1989
,
{
"z"
:
-
8
,
"f"
:
-
5
}),
(
65
,
{
"f"
:
2
}),
(
1993
,
{
"z"
:
-
8
,
"f"
:
-
3
}),
(
69
,
{
"f"
:
3
}),
(
1995
,
{
"z"
:
-
8
}),
(
70
,
{
"f"
:
4
}),
(
2000
,
{
"z"
:
-
8
,
"y"
:
-
0.2
}),
(
75
,
{
"f"
:
5
}),
(
2013
,
{}),
(
90
,
{
"f"
:
3
}),
(
2048
,
{
"f"
:
3
}),
(
200
,
{}),
(
2062
,
{
"y"
:
-
3
}),
# (2000, {"exit": True}),
(
2063
,
{
"y"
:
-
10
,
"z"
:
2
}),
# (1989, {"z": -8, "f": -5}),
(
2181
,
{}),
# (1993, {"z": -8, "f": -3}),
# (1995, {"z": -8}),
# (2000, {"z": -8, "y": -0.2}),
# (2013, {}),
# (2048, {"f": 3}),
# (2062, {"y": -3}),
# (2063, {"y": -10, "z": 2}),
# (2181, {}),
# (2082, {"exit": True})
# (2082, {"exit": True})
(
250
,
{
"exit"
:
True
}),
]
]
if
time_data
.
total_days
>
120
:
# self.two_way_foil_circle.planet.enabled = False
self
.
two_way_foil
.
scale_factor
=
0.5
if
100
>
time_data
.
total_days
>
28
:
self
.
two_way_foil
.
scale_factor
-=
1.5e-3
def
cond_cb
(
ps
):
def
cond_cb
(
ps
):
return
ps
[
"next_cond"
]
>
time_data
.
total_days
>=
ps
[
"cond"
]
return
ps
[
"next_cond"
]
>
time_data
.
total_days
>=
ps
[
"cond"
]
...
@@ -189,7 +207,21 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -189,7 +207,21 @@ class TwoWayFoilSim(UniverseSimScenes):
# if planet.scale_y_v > planet.init_scale_y / 50:
# if planet.scale_y_v > planet.init_scale_y / 50:
if
planet
.
scale_y_v
>
0.5
:
if
planet
.
scale_y_v
>
0.5
:
planet
.
scale_y_v
/=
1.01
planet
.
scale_y_v
/=
1.01
# else:
else
:
if
planet
is
self
.
pluto
.
planet
:
self
.
two_way_foil
.
init_velocity
=
[
0
,
0
,
0
]
def
two_way_foil_update
():
target
=
self
.
last_target
()
# 让实体A向着实体B移动
dt
=
target
.
two_way_foil_dt
if
hasattr
(
target
,
"two_way_foil_dt"
)
\
else
0.003
*
self
.
two_way_foil_dt_factor
self
.
two_way_foil
.
planet
.
position
=
\
lerp
(
self
.
two_way_foil
.
planet
.
position
,
target
.
planet
.
position
,
dt
)
self
.
two_way_foil
.
planet
.
update
=
two_way_foil_update
self
.
current_stage
=
self
.
stage_03
# self.gen_pixcel_image(planet)
# self.gen_pixcel_image(planet)
planet
.
scale_x_v
+=
0.05
planet
.
scale_x_v
+=
0.05
...
@@ -222,6 +254,9 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -222,6 +254,9 @@ class TwoWayFoilSim(UniverseSimScenes):
return
body
return
body
return
None
return
None
def
last_target
(
self
):
return
self
.
sun
def
stage_01
(
self
):
def
stage_01
(
self
):
"""
"""
二向箔飞向太阳
二向箔飞向太阳
...
@@ -232,14 +267,14 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -232,14 +267,14 @@ class TwoWayFoilSim(UniverseSimScenes):
if
two_bodies_colliding
(
self
.
two_way_foil
,
self
.
sun
):
if
two_bodies_colliding
(
self
.
two_way_foil
,
self
.
sun
):
# 隐藏原始二向箔,保持在原地,不在飞行
# 隐藏原始二向箔,保持在原地,不在飞行
# self.two_way_foil.planet.enabled = False
# self.two_way_foil.planet.enabled = False
self
.
two_way_foil
.
init_velocity
=
[
0
,
0
,
0
]
#
self.two_way_foil.init_velocity = [0, 0, 0]
def
two_way_foil_update
():
def
two_way_foil_update
():
target
=
self
.
get_target
()
target
=
self
.
get_target
()
if
target
is
self
.
sun
:
#
if target is self.sun:
# 关闭太阳的光晕
#
# 关闭太阳的光晕
self
.
sun
.
hide_children
()
#
self.sun.hide_children()
# 让实体A朝向实体B
# 让实体A朝向实体B
# self.two_way_foil.planet.look_at(target)
# self.two_way_foil.planet.look_at(target)
...
@@ -259,7 +294,7 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -259,7 +294,7 @@ class TwoWayFoilSim(UniverseSimScenes):
self
.
two_way_foil
.
planet
.
update
=
two_way_foil_update
self
.
two_way_foil
.
planet
.
update
=
two_way_foil_update
# 圆形二向箔显示并设置透明度为0.8
# 圆形二向箔显示并设置透明度为0.8
self
.
two_way_foil_circle
.
planet
.
alpha
=
0.
8
self
.
two_way_foil_circle
.
planet
.
alpha
=
0.
7
self
.
two_way_foil_circle
.
planet
.
enabled
=
True
self
.
two_way_foil_circle
.
planet
.
enabled
=
True
# 当前阶段为 stage_02:二向箔压平天体的阶段
# 当前阶段为 stage_02:二向箔压平天体的阶段
self
.
current_stage
=
self
.
stage_02
self
.
current_stage
=
self
.
stage_02
...
@@ -272,12 +307,12 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -272,12 +307,12 @@ class TwoWayFoilSim(UniverseSimScenes):
self
.
two_way_foil
.
planet
.
enabled
=
False
self
.
two_way_foil
.
planet
.
enabled
=
False
# self.sun.two_dim.planet.init_scale += 0.05
# self.sun.two_dim.planet.init_scale += 0.05
# 圆形二向箔不断扩展变大
# 圆形二向箔不断扩展变大
self
.
two_way_foil_circle
.
planet
.
init_scale
+=
0.
8
self
.
two_way_foil_circle
.
planet
.
init_scale
+=
0.
4
# 调整天体二维化的时间,一般需要延时,保证扩展和二维化同步的真实效果
# 调整天体二维化的时间,一般需要延时,保证扩展和二维化同步的真实效果
two_way_delay_times
=
[
0.5
,
# 太阳
two_way_delay_times
=
[
0.5
,
# 太阳
0.5
,
0.8
,
1.
0
,
# 水星 金星 地球
0.5
,
0.8
,
1.
5
,
# 水星 金星 地球
1.2
,
2.0
,
3
.0
,
# 火星 木星 土星
2.5
,
4.0
,
5
.0
,
# 火星 木星 土星
4.0
,
4.5
,
5.5
]
# 天王星 海王星 冥王星
7
,
8
,
9
]
# 天王星 海王星 冥王星
for
idx
,
b
in
enumerate
(
self
.
bodies
):
for
idx
,
b
in
enumerate
(
self
.
bodies
):
if
isinstance
(
b
,
Obj
):
if
isinstance
(
b
,
Obj
):
# 二向箔不处理
# 二向箔不处理
...
@@ -295,7 +330,13 @@ class TwoWayFoilSim(UniverseSimScenes):
...
@@ -295,7 +330,13 @@ class TwoWayFoilSim(UniverseSimScenes):
b
.
two_way_time
=
time
.
time
()
b
.
two_way_time
=
time
.
time
()
# 圆形二向箔不断旋转的效果
# 圆形二向箔不断旋转的效果
self
.
two_way_foil_circle
.
planet
.
rotation_z
+=
0.4
self
.
two_way_foil_circle
.
planet
.
rotation_z
+=
0.4
*
5
def
stage_03
(
self
):
# 如果二向箔和太阳碰撞
if
two_bodies_colliding
(
self
.
two_way_foil
,
self
.
last_target
()):
self
.
two_way_foil
.
init_velocity
=
[
0
,
0
,
0
]
self
.
two_way_foil
.
planet
.
update
=
lambda
:
None
def
on_ready
(
self
):
def
on_ready
(
self
):
"""
"""
...
@@ -387,6 +428,6 @@ if __name__ == '__main__':
...
@@ -387,6 +428,6 @@ if __name__ == '__main__':
# video_recoder=True,
# video_recoder=True,
show_control_info
=
False
,
show_control_info
=
False
,
timer_enabled
=
True
,
timer_enabled
=
True
,
show_timer
=
True
,
#
show_timer=True,
show_grid
=
False
show_grid
=
False
)
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录