提交 55381746 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 fc8c8bda
from objs.obj import Obj from objs.obj import Obj
from objs.diamond import Diamond from objs.diamond import Diamond
from objs.quad_obj import QuadObj from objs.quad_obj import QuadObj
from objs.circle_obj import CircleObj
from objs.football import Football from objs.football import Football
from objs.satellite import Satellite, Satellite2 from objs.satellite import Satellite, Satellite2
from objs.space_ship import SpaceShip from objs.space_ship import SpaceShip
......
# -*- coding:utf-8 -*-
# title :圆形
# description :圆形
# author :Python超人
# date :2023-10-17
# link :https://gitcode.net/pythoncr/
# python_version :3.9
# ==============================================================================
from objs.obj import Obj
class CircleObj(Obj):
"""
圆形
密度:3.51g/cm³
"""
def __init__(self, name="圆形", mass=5.97237e24,
init_position=[0, 0, 0],
init_velocity=[0, 0, 0],
texture=None, size_scale=1.0, distance_scale=1.0,
ignore_mass=False, density=3.51e3, color=(7, 0, 162),
trail_color=None, show_name=False,
parent=None, gravity_only_for=[]):
from ursina.models.procedural.quad import Quad
params = {
"name": name,
"mass": mass,
"init_position": init_position,
"init_velocity": init_velocity,
"density": density,
"color": color,
"texture": texture,
"size_scale": size_scale,
"distance_scale": distance_scale,
"ignore_mass": ignore_mass,
"trail_color": trail_color,
"show_name": show_name,
"parent": parent,
"gravity_only_for": gravity_only_for,
"model": "circle",
}
super().__init__(**params)
if __name__ == '__main__':
circle = CircleObj()
print(circle)
...@@ -9,34 +9,24 @@ ...@@ -9,34 +9,24 @@
from bodies import Sun, Earth, Moon from bodies import Sun, Earth, Moon
from objs import CoreValagaClas, SciFiBomber, WaterDrop, QuadObj from objs import CoreValagaClas, SciFiBomber, WaterDrop, QuadObj, CircleObj
from common.consts import AU, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH from common.consts import AU, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH
from sim_scenes.func import ursina_run, camera_look_at, create_main_entity, two_bodies_colliding from sim_scenes.func import ursina_run, camera_look_at, create_main_entity, two_bodies_colliding
from simulators.ursina.entities.body_timer import TimeData from simulators.ursina.entities.body_timer import TimeData
from simulators.ursina.entities.entity_utils import create_directional_light from simulators.ursina.entities.entity_utils import create_directional_light, create_rings
from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_event import UrsinaEvent
from ursina import camera from ursina import camera
if __name__ == '__main__':
"""
三体二向箔场景模拟
"""
from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Asteroids from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Asteroids
from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_MONTH, SECONDS_PER_YEAR, AU from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_MONTH, SECONDS_PER_YEAR, AU
from sim_scenes.func import mayavi_run, ursina_run, create_sphere_sky from sim_scenes.func import mayavi_run, ursina_run, create_sphere_sky
from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_event import UrsinaEvent
if __name__ == '__main__': if __name__ == '__main__':
# 八大行星:木星(♃)、土星(♄)、天王星(♅)、海王星(♆)、地球(⊕)、金星(♀)、火星(♂)、水星(☿) """
# 排列顺序 三体二向箔场景模拟
# 1、体积:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 = 1330:745:65:60:1:0.86:0.15:0.056 """
# 2、质量:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 = 318:95:14.53:17.15:1:0.8:0.11:0.0553
# 3、离太阳从近到远的顺序:水星、金星、地球、火星、木星、土星、天王星、海王星
# =====================================================================
# 以下展示的效果非太阳系真实的距离和大小
# 1、由于宇宙空间尺度非常大,如果按照实际的天体大小,则无法看到天体,因此需要对天体的尺寸进行放大
# 2、为了达到最佳的显示效果,对每个行星天体的距离进行了缩放
# region 构建太阳系 # region 构建太阳系
sun = Sun(size_scale=0.8e2) sun = Sun(size_scale=0.8e2)
...@@ -60,7 +50,30 @@ if __name__ == '__main__': ...@@ -60,7 +50,30 @@ if __name__ == '__main__':
init_position=[0, 0, 39.55 * AU]) \ init_position=[0, 0, 39.55 * AU]) \
.set_light_disable(True).set_ignore_gravity(True) .set_light_disable(True).set_ignore_gravity(True)
three_dim_bodies = []
two_dim_bodies = []
def create_two_dim(body):
body_2 = CircleObj(texture=body.texture,
size_scale=body.diameter * body.size_scale,
distance_scale=body.distance_scale,
init_position=body.position) \
.set_light_disable(True).set_ignore_gravity(True)
body.two_dim = body_2
body_2.three_dim = body
return body_2
for body in bodies:
two_dim_body = create_two_dim(body)
three_dim_bodies.append(body)
two_dim_bodies.append(two_dim_body)
bodies.append(two_way_foil) bodies.append(two_way_foil)
for body in two_dim_bodies:
bodies.append(body)
def on_ready(): def on_ready():
...@@ -70,11 +83,22 @@ if __name__ == '__main__': ...@@ -70,11 +83,22 @@ if __name__ == '__main__':
""" """
# 创建天空 # 创建天空
create_sphere_sky(scale=8000) create_sphere_sky(scale=8000)
for body in two_dim_bodies:
if body.three_dim.has_rings:
rings = create_rings(body.planet)
rings.scale *= 2e10
def on_timer_changed(time_data): def on_timer_changed(time_data):
two_way_foil.planet.rotation_x += 1 two_way_foil.planet.rotation_x += 1
two_way_foil.planet.rotation_y += 2 two_way_foil.planet.rotation_y += 2
for b in three_dim_bodies:
b.planet.enabled = False
for b in two_dim_bodies:
b.planet.rotation_x = 90
b.init_position = b.three_dim.position
print(b.planet.position, b.three_dim.planet.position)
pass pass
......
...@@ -270,6 +270,7 @@ def create_rings(parent): ...@@ -270,6 +270,7 @@ def create_rings(parent):
# 设置行星环不受灯光影响,否则看不清行星环 # 设置行星环不受灯光影响,否则看不清行星环
parent.ring.set_light_off() parent.ring.set_light_off()
return parent.ring
def clear_trails(parent): def clear_trails(parent):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册