Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
太阳系三体模拟器
提交
82fb2730
太阳系三体模拟器
项目概览
Python_超人
/
太阳系三体模拟器
通知
1468
Star
137
Fork
134
代码
文件
提交
分支
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看板
提交
82fb2730
编写于
2月 19, 2023
作者:
M
march3
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
三体运行模拟器
上级
2f64430e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
4 addition
and
20 deletion
+4
-20
images/bodies_run.gif
images/bodies_run.gif
+0
-0
simulators/mpl_simulator.py
simulators/mpl_simulator.py
+3
-19
simulators/simulator.py
simulators/simulator.py
+1
-1
未找到文件。
images/bodies_run.gif
查看替换文件 @
2f64430e
浏览文件 @
82fb2730
6.3 MB
|
W:
|
H:
2.9 MB
|
W:
|
H:
2-up
Swipe
Onion skin
simulators/mpl_simulator.py
浏览文件 @
82fb2730
...
...
@@ -99,7 +99,7 @@ class MplSimulator(Simulator):
else
:
color
=
'blue'
# size = 800 if str(body.name).lower().startswith("sun") else 500
size
=
body
.
raduis
/
80000
size
=
body
.
raduis
*
body
.
size_scale
/
80000
# size = pow(body.raduis / AU * body.size_scale,3)
pos
=
body
.
position
/
AU
...
...
@@ -116,23 +116,7 @@ class MplSimulator(Simulator):
ax
.
plot3D
(
_his_pos
[
0
],
_his_pos
[
1
],
_his_pos
[
2
],
color
=
color
,
alpha
=
0.5
)
z_range
=
ax
.
get_zlim
()[
1
]
-
ax
.
get_zlim
()[
0
]
# z_range = 0.11 1.52
ax
.
text
(
pos
[
0
],
pos
[
1
],
pos
[
2
]
+
size
*
(
z_range
/
5000
),
s
=
body
.
name
,
color
=
color
,
fontsize
=
12
)
# 计算每个坐标轴的数据范围
# x_range = ax.get_xlim()[1] - ax.get_xlim()[0]
# y_range = ax.get_ylim()[1] - ax.get_ylim()[0]
# z_range = ax.get_zlim()[1] - ax.get_zlim()[0]
# r = (body.raduis/AU)
# k = r / (max(x_range, y_range, z_range))
# k = r / np.array([x_range, y_range, z_range])
# 计算文本的偏移量
# 偏移量与刻度、球体大小相关
# text_offset = (max(x_range, y_range, z_range) + (size)) / 80
# text_offset = *(z_range/3)
# ax.text(pos[0] + k[0] * r, pos[1] + k[1] * r, pos[2] + k[2] * r,
# s=body.name,
# color=color,
# fontsize=12)
if
pause
>
0
:
plt
.
pause
(
pause
)
...
...
@@ -157,11 +141,11 @@ if __name__ == '__main__':
size_scale
=
4e3
,
distance_scale
=
1
),
# 地球放大 4000 倍,距离保持不变
]
# 保存 GIF,参数为指定保存 GIF 文件以及文件的画面帧数
gif_file_name
,
gif_max_frame
=
'bodies_run.gif'
,
2
00
gif_file_name
,
gif_max_frame
=
'bodies_run.gif'
,
1
00
# 只显示动画,不保存 GIF 文件。注释掉以下代码,则使用上面的参数
# TODO: 注意:显示动态图,需先进行以下设置:
# Pycharm::File –> Settings –> Tools –> Python Scientific –> Show plots in tool window(取消打勾)
gif_file_name
,
gif_max_frame
=
None
,
None
#
gif_file_name, gif_max_frame = None, None
mpl_run
(
bodies
,
SECONDS_PER_WEEK
,
gif_file_name
,
gif_max_frame
)
simulators/simulator.py
浏览文件 @
82fb2730
...
...
@@ -54,7 +54,7 @@ class Simulator(metaclass=ABCMeta):
view
.
acceleration
=
body
.
acceleration
view
.
velocity
=
body
.
velocity
# viewer.volume = body.volume
view
.
raduis
=
body
.
raduis
*
body
.
size_scale
view
.
raduis
=
body
.
raduis
view
.
his_position
=
body
.
his_position
()
view
.
is_fixed_star
=
body
.
is_fixed_star
view
.
has_rings
=
body
.
has_rings
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录