Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
2b8f6bb4
宇宙模拟器
项目概览
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看板
提交
2b8f6bb4
编写于
7月 02, 2023
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
ae57da39
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
80 addition
and
3 deletion
+80
-3
sim_scenes/func.py
sim_scenes/func.py
+3
-3
sim_scenes/science/speed_of_light_3d.py
sim_scenes/science/speed_of_light_3d.py
+74
-0
sim_scenes/science/speed_of_light_init.py
sim_scenes/science/speed_of_light_init.py
+3
-0
未找到文件。
sim_scenes/func.py
浏览文件 @
2b8f6bb4
...
@@ -244,9 +244,9 @@ def create_solar_system_bodies(ignore_mass=False, init_velocity=None):
...
@@ -244,9 +244,9 @@ def create_solar_system_bodies(ignore_mass=False, init_velocity=None):
# parent=sun), # 小行星群模拟(仅 ursina 模拟器支持)
# parent=sun), # 小行星群模拟(仅 ursina 模拟器支持)
Jupiter
(
name
=
"木星"
,
size_scale
=
0.3e3
),
# 木星放大 300 倍,距离保持不变
Jupiter
(
name
=
"木星"
,
size_scale
=
0.3e3
),
# 木星放大 300 倍,距离保持不变
Saturn
(
name
=
"土星"
,
size_scale
=
0.3e3
),
# 土星放大 300 倍,距离保持不变
Saturn
(
name
=
"土星"
,
size_scale
=
0.3e3
),
# 土星放大 300 倍,距离保持不变
Uranus
(
name
=
"天王星"
,
size_scale
=
0.
4e3
),
# 天王星放大 4
00 倍,距离保持不变
Uranus
(
name
=
"天王星"
,
size_scale
=
0.
3e3
),
# 天王星放大 3
00 倍,距离保持不变
Neptune
(
name
=
"海王星"
,
size_scale
=
1e3
),
# 海王星放大 8
00 倍,距离保持不变
Neptune
(
name
=
"海王星"
,
size_scale
=
0.3e3
),
# 海王星放大 3
00 倍,距离保持不变
Pluto
(
name
=
"冥王星"
,
size_scale
=
10e3
),
# 冥王星放大 100
00 倍,距离保持不变(从太阳系的行星中排除)
Pluto
(
name
=
"冥王星"
,
size_scale
=
0.3e3
),
# 冥王星放大 3
00 倍,距离保持不变(从太阳系的行星中排除)
]
]
# 遍历所有天体,
# 遍历所有天体,
...
...
sim_scenes/science/speed_of_light_3d.py
0 → 100644
浏览文件 @
2b8f6bb4
# -*- coding:utf-8 -*-
# title :在太阳系中以光速运行(裸眼3D)
# description :在太阳系中以光速运行(裸眼3D)
# author :Python超人
# date :2023-07-02
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from
common.consts
import
AU
from
sim_scenes.func
import
ursina_run
,
create_solar_system_bodies
,
create_light_ship
from
common.consts
import
LIGHT_SPEED
from
sim_scenes.science.speed_of_light_init
import
SpeedOfLightInit
# TODO: 三种不同的摄像机视角
camera_follow_light
=
None
# 摄像机固定,不会跟随光
camera_follow_light
=
'ForwardView'
# 摄像机跟随光,方向是向前看
# 实例化一个初始化对象(订阅事件,记录到达每个行星所需要的时间)
init
=
SpeedOfLightInit
(
camera_follow_light
)
# TODO: 注意:这里的算法是基于牛顿的万有引力(质量为0不受引力的影响在天体物理学中是不严谨)
# 创建太阳系天体(忽略质量,引力无效,初速度全部为0)
bodies
=
create_solar_system_bodies
(
ignore_mass
=
True
,
init_velocity
=
[
0
,
0
,
0
])
camera_pos
=
"left"
# camera_pos = "right"
camera_l2r
=
0.01
*
AU
if
camera_pos
==
"right"
:
# 摄像机右眼
init
.
light_init_position
[
0
]
+=
camera_l2r
elif
camera_pos
==
"left"
:
# 摄像机左眼
init
.
light_init_position
[
0
]
-=
camera_l2r
init
.
light_init_position
[
0
]
=
4000000
init
.
light_init_position
[
1
]
=
1000000
# init.auto_control_speed = True
# 从 init 对象中获取 光体的大小(light_size_scale),光体的位置(light_init_position)
# 创建一个以光速前进的天体(模拟一个光子) speed=1光速=299792.458千米/秒,注意:质量为0才能达到光速,虽然如此,但也可以试试超光速
light_ship
=
create_light_ship
(
init
.
light_size_scale
,
init
.
light_init_position
,
speed
=
LIGHT_SPEED
*
1
)
# 增加光速天体到天体集合
bodies
.
append
(
light_ship
)
# 运行前指定bodies、light_body并订阅事件
init
.
light_ship
=
light_ship
init
.
bodies
=
bodies
init
.
event_subscription
()
def
body_arrived
(
body
):
if
body
.
name
==
"火星"
:
light_ship
.
acceleration
=
[
0
,
35
,
300
]
elif
body
.
name
==
"木星"
:
light_ship
.
acceleration
=
[
0
,
-
100
,
200
]
elif
body
.
name
==
"土星"
:
light_ship
.
acceleration
=
[
0
,
55
,
200
]
elif
body
.
name
==
"天王星"
:
light_ship
.
acceleration
=
[
0
,
-
50
,
200
]
elif
body
.
name
==
"海王星"
:
light_ship
.
acceleration
=
[
-
3
,
48
,
300
]
print
(
body
)
init
.
body_arrived
=
body_arrived
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run
(
bodies
,
60
,
position
=
init
.
camera_position
,
show_trail
=
init
.
show_trail
,
show_timer
=
True
,
view_closely
=
init
.
view_closely
,
bg_music
=
"sounds/interstellar.mp3"
)
sim_scenes/science/speed_of_light_init.py
浏览文件 @
2b8f6bb4
...
@@ -37,6 +37,7 @@ class SpeedOfLightInit:
...
@@ -37,6 +37,7 @@ class SpeedOfLightInit:
self
.
__bodies
=
None
self
.
__bodies
=
None
self
.
view_closely
=
False
self
.
view_closely
=
False
self
.
auto_control_speed
=
False
self
.
auto_control_speed
=
False
self
.
body_arrived
=
None
if
self
.
__camera_follow_light
in
[
"SideView"
]:
if
self
.
__camera_follow_light
in
[
"SideView"
]:
# 摄像机位置 = 前-后+、上+下-、左-右+、
# 摄像机位置 = 前-后+、上+下-、左-右+、
...
@@ -282,6 +283,8 @@ class SpeedOfLightInit:
...
@@ -282,6 +283,8 @@ class SpeedOfLightInit:
continue
continue
# 计算判断,如果光速天体距离到达了某个天体,就记录到“已到达天体列表”中
# 计算判断,如果光速天体距离到达了某个天体,就记录到“已到达天体列表”中
if
self
.
light_ship
.
position
[
2
]
>=
body
.
position
[
2
]:
if
self
.
light_ship
.
position
[
2
]
>=
body
.
position
[
2
]:
if
callable
(
self
.
body_arrived
):
self
.
body_arrived
(
body
)
self
.
arrived_bodies
.
append
(
body
)
self
.
arrived_bodies
.
append
(
body
)
if
self
.
text_panel
is
not
None
:
if
self
.
text_panel
is
not
None
:
self
.
arrived_info
+=
f
"[
{
time_data
.
time_text
}
]
\t
到达
\t
[
{
body
.
name
}
]
\n\n
"
self
.
arrived_info
+=
f
"[
{
time_data
.
time_text
}
]
\t
到达
\t
[
{
body
.
name
}
]
\n\n
"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录