Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
23a0c521
宇宙模拟器
项目概览
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看板
提交
23a0c521
编写于
3月 26, 2024
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
6668868a
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
82 addition
and
7 deletion
+82
-7
引力世界/__init__.py
引力世界/__init__.py
+1
-0
引力世界/万物/岩石.py
引力世界/万物/岩石.py
+10
-0
引力世界/模拟场景.py
引力世界/模拟场景.py
+34
-7
引力世界/模拟实验室/太阳系/木月保护地球.py
引力世界/模拟实验室/太阳系/木月保护地球.py
+37
-0
未找到文件。
引力世界/__init__.py
浏览文件 @
23a0c521
...
...
@@ -2,3 +2,4 @@ from 引力世界.造物主 import 造物主
from
引力世界.模拟场景
import
模拟场景
from
引力世界.万物.太阳系
import
*
from
引力世界.万物.岩石
import
*
引力世界/万物/岩石.py
0 → 100644
浏览文件 @
23a0c521
from
objs
import
*
from
引力世界
import
造物主
class
岩石
(
Rock
):
def
__init__
(
self
,
初始位置
=
[
0
,
0
,
0
],
初始速度
=
[
0
,
0
,
0
],
缩放倍数
=
1
):
super
(
岩石
,
self
).
__init__
(
init_velocity
=
初始速度
,
init_position
=
初始位置
,
size_scale
=
缩放倍数
)
造物主
.
登记
([
'岩石'
,
'rock'
],
岩石
)
引力世界/模拟场景.py
浏览文件 @
23a0c521
...
...
@@ -12,6 +12,7 @@ from common.celestial_data_service import set_solar_system_celestial_position, c
get_reality_orbit_points
,
get_body_posvel
,
recalc_moon_position
,
calc_solar_acceleration
from
common.consts
import
SECONDS_PER_DAY
,
AU
from
bodies.body
import
Body
from
objs.obj
import
Obj
from
bodies
import
*
from
sim_scenes.func
import
create_sphere_sky
,
ursina_run
from
sim_scenes.universe_sim_scenes
import
UniverseSimScenes
...
...
@@ -27,11 +28,14 @@ import numpy as np
关闭
=
False
打开
=
True
无
=
None
是
=
True
否
=
False
class
模拟配置
:
显示轨道
=
关闭
地月距离倍数
=
1.0
中心天体
=
无
显示坐标轴
=
否
class
模拟场景
(
UniverseSimScenes
):
...
...
@@ -58,7 +62,7 @@ class 模拟场景(UniverseSimScenes):
def
获取天体列表
(
self
):
for
p
in
vars
(
self
):
f
=
getattr
(
self
,
p
)
if
isinstance
(
f
,
Body
):
if
isinstance
(
f
,
Body
)
or
isinstance
(
f
,
Obj
)
:
yield
f
def
获取坐标和速度
(
self
,
天体名称
):
...
...
@@ -91,12 +95,12 @@ class 模拟场景(UniverseSimScenes):
UrsinaConfig
.
trail_type
=
"line"
# UrsinaConfig.trail_length = 91
# UrsinaConfig.trail_type = "line"
UrsinaConfig
.
trail_length
=
42
0
UrsinaConfig
.
trail_length
=
20
0
# UrsinaConfig.trail_length = 1000
UrsinaConfig
.
trail_factor
=
3
UrsinaConfig
.
trail_thickness_factor
=
3
UrsinaConfig
.
trail_factor
=
2
UrsinaConfig
.
trail_thickness_factor
=
2
if
self
.
配置项
.
显示坐标轴
:
WorldGrid
().
draw_axises
(
3
)
camera
.
clip_plane_near
=
0.1
...
...
@@ -116,6 +120,9 @@ class 模拟场景(UniverseSimScenes):
bodies
=
list
(
self
.
获取天体列表
())
for
body
in
bodies
:
body
.
rotate_angle
-=
30
UrsinaEvent
.
on_ready_subscription
(
self
.
on_ready
)
# UrsinaEvent.on_timer_changed_subscription(on_timer_changed)
...
...
@@ -139,6 +146,7 @@ class 太阳系模拟场景(模拟场景):
start_time
=
start_time
,
days
=
orbital_days
,
segments
=
100
)
points
=
self
.
rotate_points
(
points
)
if
self
.
配置项
.
中心天体
is
None
:
center_pos
=
center_body
.
position
...
...
@@ -150,6 +158,20 @@ class 太阳系模拟场景(模拟场景):
alpha
=
alpha
)
return
orbit_line
def
rotate_points
(
self
,
points
):
# 将角度转换为弧度
angle
=
np
.
radians
(
22
)
# 创建旋转矩阵
rotation_matrix
=
np
.
array
([
[
1
,
0
,
0
],
[
0
,
np
.
cos
(
angle
),
-
np
.
sin
(
angle
)],
[
0
,
np
.
sin
(
angle
),
np
.
cos
(
angle
)]
])
# 对每个点应用旋转矩阵
rotated_points
=
[
np
.
dot
(
rotation_matrix
,
point
)
for
point
in
points
]
return
rotated_points
def
create_orbit_lines
(
self
):
"""
创建太阳系天体的真实轨迹(太阳和哈雷彗星除外)
...
...
@@ -233,8 +255,10 @@ class 太阳系模拟场景(模拟场景):
if
not
self
.
配置项
.
中心天体
is
None
:
position
=
[
position
[
0
]
-
center_pos
[
0
],
position
[
1
]
-
center_pos
[
1
],
position
[
2
]
-
center_pos
[
2
]]
positions
=
self
.
rotate_points
([
position
])
# 实时调整天体的位置和速度
body
.
position
=
np
.
array
(
position
)
body
.
position
=
np
.
array
(
position
s
[
0
]
)
if
set_velocity
:
body
.
velocity
=
np
.
array
(
velocity
)
...
...
@@ -332,12 +356,15 @@ class 太阳系模拟场景(模拟场景):
self
.
bodies
=
list
(
self
.
获取天体列表
())
# for body in self.bodies:
# body.rotate_angle -= 30
UrsinaEvent
.
on_ready_subscription
(
self
.
on_ready
)
UrsinaEvent
.
on_timer_changed_subscription
(
self
.
on_timer_changed
)
ursina_run
(
self
.
bodies
,
SECONDS_PER_DAY
,
position
=
(
0
,
0
,
-
2
*
AU
),
cosmic_bg
=
""
,
gravity_works
=
False
,
#
gravity_works=False,
timer_enabled
=
True
,
show_grid
=
False
,
show_camera_info
=
False
,
...
...
引力世界/模拟实验室/太阳系/木月保护地球.py
0 → 100644
浏览文件 @
23a0c521
# -*- coding:utf-8 -*-
# title :太阳地球月球模拟
# description :太阳地球月球模拟
# date :2024-03-20
# python_version :3.9
# ==============================================================================
from
引力世界
import
造物主
from
引力世界.模拟场景
import
*
class
木月保护地球模拟
(
太阳系模拟场景
):
def
配置
(
self
,
配置项
:
模拟配置
):
配置项
.
显示轨道
=
打开
配置项
.
地月距离倍数
=
50
配置项
.
显示坐标轴
=
否
# 配置项.中心天体 = self.太阳
def
造物
(
self
):
self
.
太阳
=
造物主
.
造物
(
名称
=
'太阳'
,
缩放倍数
=
8e1
)
# self.太阳2 = 造物主.造物(名称='太阳', 缩放倍数=5e1)
self
.
地球
=
造物主
.
造物
(
名称
=
'地球'
,
缩放倍数
=
1.5e3
)
self
.
地球
.
ignore_mass
=
True
self
.
月球
=
造物主
.
造物
(
名称
=
'月球'
,
缩放倍数
=
2.5e3
)
self
.
月球
.
ignore_mass
=
True
self
.
木星
=
造物主
.
造物
(
名称
=
'木星'
,
缩放倍数
=
5e2
)
self
.
木星
.
ignore_mass
=
True
# for i in range(1, 50):
# setattr(self, "岩石" + str(i), 造物主.造物(名称='岩石', 缩放倍数=9*pow(10,i)))
# s = getattr(self, "岩石" + str(i))
# s.gravity_only_for = [ self.太阳]
场景
=
木月保护地球模拟
()
# 场景.摄像机看向(场景.地球)
场景
.
运行
(
运行时间
=
'2024-09-24 00:00:00'
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录