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

Python超人-宇宙模拟器

上级 6009a01c
......@@ -11,7 +11,7 @@ from ursina import camera, application, lerp, Vec3
from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto
from common.celestial_data_service import init_bodies_reality_pos_vels, conv_to_astropy_time, \
set_solar_system_celestial_position, init_bodies_pos_vels, get_init_pos_vels_2
from common.consts import SECONDS_PER_YEAR,SECONDS_PER_MINUTE,SECONDS_PER_HOUR, AU
from common.consts import SECONDS_PER_YEAR, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, AU
from common.func import calculate_distance
from bodies import Earth
from objs import QuadObj, CircleObj, Obj, CoreValagaClas
......@@ -41,28 +41,28 @@ class SolarSystemExplorer(UniverseSimScenes):
show_trail = False
self.SIZE_FACTOR = 0.01
self.init_pos = [2 * AU, 2 * AU, -10 * AU]
self.sun = Sun(size_scale=20e2*self.SIZE_FACTOR, show_trail=show_trail,
self.sun = Sun(size_scale=20e2 * self.SIZE_FACTOR, show_trail=show_trail,
# color=(255, 250, 245),
# texture="",
texture="sun_light.jpg"
)
self.sun.glows = (24, 1.008, 0.04)
self.sun.set_resolution(200)
self.mercury = Mercury(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.6, show_trail=show_trail)
self.venus = Venus(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.5, show_trail=show_trail)
self.earth = Earth(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.5, rotate_angle=0, show_trail=show_trail)
self.mars = Mars(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.4, show_trail=show_trail)
self.jupiter = Jupiter(size_scale=0.3e3*self.SIZE_FACTOR, distance_scale=0.7, show_trail=show_trail)
self.saturn = Saturn(size_scale=0.3e3*self.SIZE_FACTOR, distance_scale=0.52, show_trail=show_trail)
self.uranus = Uranus(size_scale=0.8e3*self.SIZE_FACTOR, distance_scale=0.34, show_trail=show_trail)
self.neptune = Neptune(size_scale=0.8e3*self.SIZE_FACTOR, distance_scale=0.25, show_trail=show_trail)
self.pluto = Pluto(size_scale=1e4*self.SIZE_FACTOR, distance_scale=0.23, show_trail=show_trail)
self.mercury = Mercury(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.6, show_trail=show_trail)
self.venus = Venus(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.5, show_trail=show_trail)
self.earth = Earth(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.5, rotate_angle=0, show_trail=show_trail)
self.mars = Mars(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.4, show_trail=show_trail)
self.jupiter = Jupiter(size_scale=0.3e3 * self.SIZE_FACTOR, distance_scale=0.7, show_trail=show_trail)
self.saturn = Saturn(size_scale=0.3e3 * self.SIZE_FACTOR, distance_scale=0.52, show_trail=show_trail)
self.uranus = Uranus(size_scale=0.8e3 * self.SIZE_FACTOR, distance_scale=0.34, show_trail=show_trail)
self.neptune = Neptune(size_scale=0.8e3 * self.SIZE_FACTOR, distance_scale=0.25, show_trail=show_trail)
self.pluto = Pluto(size_scale=1e4 * self.SIZE_FACTOR, distance_scale=0.23, show_trail=show_trail)
D = AU / 10
self.camera_target = CoreValagaClas(name="摄像机镜头", mass=1e30, color=(111, 140, 255),
# init_position=[0, 0, 0],
init_position=self.init_pos,
init_velocity=[0, 0, 0],
size_scale=1e3*self.SIZE_FACTOR).set_ignore_gravity(True)
size_scale=1e3 * self.SIZE_FACTOR).set_ignore_gravity(True)
self.bodies = [
self.sun, # 太阳
......@@ -78,6 +78,28 @@ class SolarSystemExplorer(UniverseSimScenes):
self.camera_target
]
self.sun.target_offset = [1, 1, 1.1]
self.mercury.target_offset = [1, 1, 1.002]
self.venus.target_offset = [1, 1, 1]
self.earth.target_offset = [1, 1, 1]
self.mars.target_offset = [1, 1, 1]
self.jupiter.target_offset = [1, 1, 1]
self.saturn.target_offset = [1, 1, 1]
self.uranus.target_offset = [1, 1, 1]
self.neptune.target_offset = [1, 1, 1]
self.pluto.target_offset = [1, 1, 1]
self.sun.dd_factor = 1.5
self.mercury.dd_factor = 5
self.venus.dd_factor = 1.5
self.earth.dd_factor = 1.5
self.mars.dd_factor = 1.5
self.jupiter.dd_factor = 1.5
self.saturn.dd_factor = 1.5
self.uranus.dd_factor = 1.5
self.neptune.dd_factor = 1.5
self.pluto.dd_factor = 1.5
init_bodies_pos_vels(self.bodies, init_pos_vels_fun=self.get_init_pos_vels)
def get_init_pos_vels(self):
......@@ -117,8 +139,6 @@ class SolarSystemExplorer(UniverseSimScenes):
init_pos_vels['pluto']['vel'] = [-4.699999809265137, 0.0, -0.007128323893994093]
return init_pos_vels
def build(self):
"""
构建太阳系系统以及哈雷彗星
......@@ -147,7 +167,7 @@ class SolarSystemExplorer(UniverseSimScenes):
# camera.clip_plane_near = 0.1
camera.clip_plane_far = 51000
application.time_scale = 0.001
application.time_scale = 0.0001
# camera.fov = 60
# self.current_stage = self.stage_01
......@@ -245,7 +265,11 @@ class SolarSystemExplorer(UniverseSimScenes):
target = self.get_target()
target_scale = target.planet.scale_x
target_pos = target.planet.position + Vec3(0, target_scale * (3 / 5), 0)
target_offset = target.target_offset
target_pos = target.planet.position + \
Vec3(target_scale * (target_offset[0] - 1),
target_scale * (1 / 10) * target_offset[1],
target_scale * (target_offset[2] - 1))
self.camera_target.planet.look_at(target_pos)
......@@ -253,21 +277,21 @@ class SolarSystemExplorer(UniverseSimScenes):
if not hasattr(target, "distance"):
target.distance = dd
self.camera_target.planet.position = lerp(self.camera_target.planet.position, target_pos,
camera.speed * time.dt * target.distance)
camera_target_pos =self.camera_target.planet.position
camera_target_pos = self.camera_target.planet.position
dd2 = distance(camera.position, camera_target_pos)
camera.position = lerp(camera.position, camera_target_pos,
camera.speed * 0.99 * time.dt * target.distance)
camera.speed * 1 * time.dt * target.distance)
if dd < target_scale * 3 and dd2 < target_scale*3:
if dd < target_scale * target.dd_factor and dd2 < target_scale * target.dd_factor:
if target is not None:
target.is_arrived = True
camera_look_at(self.camera_target, rotation_z=0)
# print(camera.position)
print(target.name, target_scale, dd, self.camera_target.planet.position)
# print(dd)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册