Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
太阳系三体模拟器
提交
11e13a27
太阳系三体模拟器
项目概览
Python_超人
/
太阳系三体模拟器
通知
1075
Star
131
Fork
128
代码
文件
提交
分支
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看板
提交
11e13a27
编写于
3月 05, 2023
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
太阳系三体模拟器
上级
bf8772e1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
128 addition
and
40 deletion
+128
-40
scenes/demo.py
scenes/demo.py
+126
-38
simulators/ursina_simulator.py
simulators/ursina_simulator.py
+2
-2
textures/cosmic1.png
textures/cosmic1.png
+0
-0
textures/cosmic2.png
textures/cosmic2.png
+0
-0
未找到文件。
scenes/demo.py
浏览文件 @
11e13a27
...
...
@@ -6,41 +6,129 @@
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from
bodies
import
Sun
,
Earth
from
common.consts
import
SECONDS_PER_WEEK
,
SECONDS_PER_DAY
from
scenes.func
import
mayavi_run
,
mpl_run
from
bodies.body
import
Body
,
AU
if
__name__
==
'__main__'
:
"""
太阳、地球模拟运行
"""
# 构建两个天体对象(太阳、地球)
bodies
=
[
# 太阳的质量为 1.9891×10³⁰ kg
# 初始位置 x=0, y=0, z=0
# 初始速度 x=0, y=0, z=0
# 纹理图片路径为 texture/douyin.jpg
# 放大倍数为 120 倍
# 距离保持不变
Sun
(
name
=
"太阳"
,
mass
=
1.9891e30
,
init_position
=
[
0
,
0
,
0
],
init_velocity
=
[
0
,
0
,
0
],
texture
=
"douyin.jpg"
,
size_scale
=
1.2e2
,
distance_scale
=
1.0
),
# 地球的质量为 5.97237✕10²⁴ kg
# 初始位置 x=1.12天文单位, y=0, z=0
# 初始速度 x=0, y=29.7929.79 km/s, z=0
# 纹理图片路径为 texture/pythoncr.jpg
# 放大倍数为 5000 倍
# 距离保持不变
Earth
(
name
=
"地球"
,
mass
=
5.97237e24
,
init_position
=
[
1.12
*
AU
,
0
,
0
],
init_velocity
=
[
0
,
29.79
,
0
],
texture
=
"pythoncr.jpg"
,
size_scale
=
5e3
,
distance_scale
=
1.0
),
]
# 使用 mayavi 查看的运行效果
mayavi_run
(
bodies
,
SECONDS_PER_DAY
,
view_azimuth
=
135
)
# 使用 matplotlib 查看运行效果
# mpl_run(bodies, SECONDS_PER_WEEK)
# from bodies import Sun, Earth
# from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY
# from scenes.func import mayavi_run, mpl_run
# from bodies.body import Body, AU
# """
# 代码用途:模拟3D星空
# 作者:阿黎逸阳
#
# """
# from turtle import *
# from random import random,randint
#
# s = Screen()
# width, height = 800, 600
# s.setup(width, height) # 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例
# s.title("模拟3D星空-阿黎逸阳") # 设置标题
# s.bgcolor("black") # 设置背景颜色为黑色
# s.mode("logo") # 设置乌龟模式(“standard”,“logo”或“world”)并执行重置,logo表示向上
# s.delay(0) # 设置或返回以毫秒为单位的绘图延迟,这里要设为0,否则很卡
#
# printer = Turtle()
# printer.hideturtle()
# printer.penup()
# printer.color('white')
# printer.goto(-100, -150)
# printer.write("In the whole universe\n\n", move=True, align="left", font=("Italic", 30, "bold"))
# printer.goto(-300, -200)
# printer.write("you're the only star belongs me!\n\n", move=True, align="left", font=("Italic", 30, "bold"))
#
# t = Turtle(visible=False, shape='circle')
# t.pencolor("white") # 设置画笔的颜色
# t.fillcolor("white") # 设置图形填充颜色
# t.penup() # 抬起画笔
# t.setheading(-90) # 设置当前朝向角度
# t.goto(width / 2, randint(-height / 2, height / 2)) # 把画笔移动到定点
#
#
#
# def bgpic(self, picname=None):
# if picname is None:
# return self._bgpicname
# if picname not in self._bgpics:
# self._bgpics[picname] = self._image(picname)
# self._setbgpic(self._bgpic, self._bgpics[picname])
# self._bgpicname = picname
#
#
#
# from turtle import *
# from random import random, randint
# import os # 导入设置路径的库
# import sys
# # from pygame.locals import *
#
# # os.chdir('F:/微信公众号/Python/0.已发表/23.绘制星空图/星空图v2') # 把路径改为数据存放的路径
# screen = Screen()
# width, height = 800, 600
# screen.setup(width, height) # 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例
# screen.title("模拟3D星空-阿黎逸阳") # 设置标题
# screen.bgcolor("black") # 设置背景颜色 darkblue
# # screen.bgpic(r'./aa.gif')
# screen.mode("logo") # 设置乌龟模式(“standard”,“logo”或“world”)并执行重置,logo表示向上
# screen.delay(0) # 设置或返回以毫秒为单位的绘图延迟,这里要设为0,否则很卡
#
# printer = Turtle()
# printer.hideturtle()
from
PIL
import
Image
from
random
import
randint
import
time
xSize
=
2048
ySize
=
1024
x
=
int
(
xSize
/
2
)
y
=
int
(
ySize
/
2
)
im
=
Image
.
new
(
'RGBA'
,
(
xSize
,
ySize
),
'black'
)
im
.
getpixel
((
x
,
y
))
step
=
2000
def
move
():
"""随机生成并返回12345678个数字,分别代表 上右下左 右上 右下 左下 左上"""
return
randint
(
0
,
xSize
-
1
),
randint
(
0
,
ySize
-
1
)
def
color
():
"""在所在像素下点涂颜色"""
global
im
,
x
,
y
add_color
=
255
src_str_list
=
im
.
load
()
data
=
src_str_list
[
x
,
y
]
data_list
=
list
(
data
)
print
(
data
)
if
data_list
[
0
]
<
255
:
data_list
[
0
]
+=
add_color
data_list
[
1
]
+=
add_color
data_list
[
2
]
+=
add_color
data
=
tuple
(
data_list
)
im
.
putpixel
((
x
,
y
),
data
)
def
judge
():
"""判断是否已经走到边界上"""
global
x
,
y
,
xSize
,
ySize
b
=
int
(
xSize
/
2
)
if
x
>=
xSize
-
1
:
x
-=
b
if
y
>=
ySize
-
1
:
y
-=
b
if
x
<=
1
:
x
+=
b
if
y
<=
0
:
y
+=
b
def
draw
():
"""根据move返回值来移动图片上的像素点"""
global
x
,
y
,
im
x
,
y
=
move
()
color
()
for
i
in
range
(
step
):
move
()
draw
()
judge
()
im
.
save
(
f
'RandomMove2D.png'
)
exit
()
simulators/ursina_simulator.py
浏览文件 @
11e13a27
...
...
@@ -135,7 +135,7 @@ class UrsinaSimulator(Simulator):
def
cosmic_background
(
self
,
texture
=
'../textures/cosmic1.jpg'
):
texture
=
load_texture
(
texture
)
sky_dome
=
Entity
(
model
=
'sky_dome'
,
texture
=
texture
,
scale
=
3
00
,
sky_dome
=
Entity
(
model
=
'sky_dome'
,
texture
=
texture
,
scale
=
5
00
,
color
=
color
.
white
,
position
=
(
0
,
0
,
0
),
rotation
=
(
0
,
0
,
0
))
...
...
@@ -225,6 +225,6 @@ if __name__ == '__main__':
light
=
True
cosmic_bg
=
'../textures/cosmic1.
jp
g'
cosmic_bg
=
'../textures/cosmic1.
pn
g'
# cosmic_bg = None
simulator
.
run
(
SECONDS_PER_DAY
,
light
=
light
,
cosmic_bg
=
cosmic_bg
)
textures/cosmic1.png
0 → 100644
浏览文件 @
11e13a27
19.7 KB
textures/cosmic2.png
0 → 100644
浏览文件 @
11e13a27
31.5 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录