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

Python超人-宇宙模拟器

上级 70b52784
...@@ -36,6 +36,8 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -36,6 +36,8 @@ class LookAtSkyOnEarth(UniverseSimScenes):
# self.sun.glows = (0, 1.005, 0.1) # self.sun.glows = (0, 1.005, 0.1)
self.sun = Sun(size_scale=2e1, texture="transparent.png") self.sun = Sun(size_scale=2e1, texture="transparent.png")
self.sun.glows = None self.sun.glows = None
self.earth_core = Sun(size_scale=2e-1, texture="sun.png", rotation_speed=0).set_ignore_gravity(True)
self.earth_core.glows = None
self.show_sphere_sky = show_sphere_sky self.show_sphere_sky = show_sphere_sky
self.look_point = look_point # -1:北半球, 1:南半球, 0:赤道 self.look_point = look_point # -1:北半球, 1:南半球, 0:赤道
# self.look_at_earth = look_at_earth # self.look_at_earth = look_at_earth
...@@ -66,14 +68,16 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -66,14 +68,16 @@ class LookAtSkyOnEarth(UniverseSimScenes):
earth_cn_size_factor=earth_cn_size_factor, earth_cn_size_factor=earth_cn_size_factor,
earth_clouds_size_factor=earth_clouds_size_factor) earth_clouds_size_factor=earth_clouds_size_factor)
self.earth.set_resolution(200) self.earth.set_resolution(200)
self.earth.set_ignore_gravity(True)
self.earth.set_light_disable(True) self.earth.set_light_disable(True)
# # 地球立春的位置和速度 # # 地球立春的位置和速度
# self.earth.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] # self.earth.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08]
# self.earth.init_velocity = [-23.550875, 0., -18.05398] # self.earth.init_velocity = [-23.550875, 0., -18.05398]
#
self.earth_clouds.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08] # self.earth_clouds.init_position = [-9.1507536e+07, 0.0000000e+00, 1.1907757e+08]
self.earth_clouds.init_velocity = [-23.550875, 0., -18.05398] # self.earth_clouds.init_velocity = [-23.550875, 0., -18.05398]
self.earth.rotate_axis_color = (255, 255, 50) self.earth.rotate_axis_color = (255, 255, 50)
self.earth.rotate_axis_scale = 0.65 self.earth.rotate_axis_scale = 0.65
...@@ -82,10 +86,16 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -82,10 +86,16 @@ class LookAtSkyOnEarth(UniverseSimScenes):
if pos_vel is not None: if pos_vel is not None:
self.earth.init_position = pos_vel["pos"] self.earth.init_position = pos_vel["pos"]
self.earth.init_velocity = pos_vel["vel"] # self.earth.init_velocity = pos_vel["vel"]
self.earth.init_velocity = [0, 0, 0]
self.target = self.create_camera_target()
self.target.size_scale = 1e4
ep = self.earth.init_position
self.target.init_position = [ep[0]+4e7,ep[1],ep[2]-4e7]
self.bodies = [ self.bodies = [
self.sun, self.earth # , self.earth_clouds self.sun, self.earth #, self.target # , self.earth_core # , self.earth_clouds
] ]
if self.show_china: if self.show_china:
...@@ -101,6 +111,8 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -101,6 +111,8 @@ class LookAtSkyOnEarth(UniverseSimScenes):
from ursina import Entity, color from ursina import Entity, color
r = 0.5 r = 0.5
scale = 0.05 scale = 0.05
model = 'diamond'
model = "sphere"
# subdivisions = 16 # subdivisions = 16
x_y_angle = math.pi * self.angle / 180 x_y_angle = math.pi * self.angle / 180
xr = r * math.cos(x_y_angle) xr = r * math.cos(x_y_angle)
...@@ -109,29 +121,32 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -109,29 +121,32 @@ class LookAtSkyOnEarth(UniverseSimScenes):
x_z_angle = math.pi * 45 / 180 x_z_angle = math.pi * 45 / 180
x = r * math.cos(x_z_angle) x = r * math.cos(x_z_angle)
z = r * math.sin(x_z_angle) z = r * math.sin(x_z_angle)
if self.look_point is None or self.look_point == 0:
watcher_e = Entity(parent=self.earth.planet, self.watcher_e = Entity(parent=self.earth.planet,
model="sphere", # create_sphere(r, subdivisions), model=model, # create_sphere(r, subdivisions),
scale=scale, scale=scale,
y=0.0, x=-x, z=z, color=color.red) y=0.0, x=-x, z=z, color=color.red)
# y=0.0, x=x-0.17, z=pow(pow(r, 2) - pow(x-0.17, 2), 0.5), color=color.green) # y=0.0, x=x-0.17, z=pow(pow(r, 2) - pow(x-0.17, 2), 0.5), color=color.green)
x = xr * math.cos(x_z_angle) x = xr * math.cos(x_z_angle)
z = xr * math.sin(x_z_angle) z = xr * math.sin(x_z_angle)
watcher_n = Entity(parent=self.earth.planet, if self.look_point is None or self.look_point == -1:
model="sphere", # create_sphere(r, subdivisions), self.watcher_n = Entity(parent=self.earth.planet,
model=model, # create_sphere(r, subdivisions),
scale=scale, scale=scale,
y=y, x=-x, z=z, color=color.green) y=y, x=-x, z=z, color=color.green)
# y=y, x=x, z=pow(pow(r, 2) - pow(x, 2) - pow(y, 2), 0.5), color=color.red) # y=y, x=x, z=pow(pow(r, 2) - pow(x, 2) - pow(y, 2), 0.5), color=color.red)
if self.look_point is None or self.look_point == 1:
watcher_s = Entity(parent=self.earth.planet, self.watcher_s = Entity(parent=self.earth.planet,
model="sphere", # create_sphere(r, subdivisions), model=model, # create_sphere(r, subdivisions),
scale=scale, scale=scale,
y=-y, x=-x, z=z, color=color.blue) y=-y, x=-x, z=z, color=color.blue)
# y=-y, x=x, z=pow(pow(r, 2) - pow(x, 2) - pow(y, 2), 0.5), color=color.blue) # y=-y, x=x, z=pow(pow(r, 2) - pow(x, 2) - pow(y, 2), 0.5), color=color.blue)
def on_ready(self): def on_ready(self):
self.create_sky_watchers()
self.earth.planet.rotation_y -= 180 # 一开始就正对太阳 self.earth.planet.rotation_y -= 180 # 一开始就正对太阳
self.earth.planet.alpha = 0.8 # self.earth.planet.alpha = 0.8
# self.earth_cn.planet.rotation_y -= 185 # 一开始就正对太阳 # self.earth_cn.planet.rotation_y -= 185 # 一开始就正对太阳
if hasattr(self.earth_clouds, "planet"): if hasattr(self.earth_clouds, "planet"):
self.earth_clouds.planet.rotation_y -= 50 # 一开始就正对太阳 self.earth_clouds.planet.rotation_y -= 50 # 一开始就正对太阳
...@@ -200,12 +215,22 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -200,12 +215,22 @@ class LookAtSkyOnEarth(UniverseSimScenes):
# camera.fov = 120 # 默认:60 # camera.fov = 120 # 默认:60
# camera.parent = self.sun.planet # camera.parent = self.sun.planet
else: else:
camera.parent = self.earth.planet if self.look_point == 0:
camera.parent = self.watcher_e
elif self.look_point == -1:
camera.parent = self.watcher_n
elif self.look_point == 1:
camera.parent = self.watcher_s
# camera.parent = self.earth.planet
camera.rotation_z = 90 camera.rotation_z = 90
camera.fov = 75 # 默认:60 camera.fov = 75 # 默认:60
camera.clip_plane_near = 10 camera.clip_plane_near = 10
camera.clip_plane_far = 1000000 camera.clip_plane_far = 100000000
if hasattr(self.earth_core, "planet"):
self.earth_core.planet.parent = self.earth.planet
self.earth_core.planet.alpha = 1
def delay_app_start(): def delay_app_start():
import time import time
...@@ -221,12 +246,12 @@ class LookAtSkyOnEarth(UniverseSimScenes): ...@@ -221,12 +246,12 @@ class LookAtSkyOnEarth(UniverseSimScenes):
# self.sun.planet.glow_circle.look_at(camera) # self.sun.planet.glow_circle.look_at(camera)
create_foreground(f"armazonesdusk_{self.look_point + 2}.png") create_foreground(f"armazonesdusk_{self.look_point + 2}.png")
if self.look_point is None: # if self.look_point is None:
self.create_sky_watchers()
def on_timer_changed(self, time_data: TimeData): def on_timer_changed(self, time_data: TimeData):
if abs(self.earth.planet.init_rotation_y - self.earth.planet.rotation_y) > 380: if abs(self.earth.planet.init_rotation_y - self.earth.planet.rotation_y) > 380:
exit(0) exit(0)
# if self.show_china and self.wait_days_count > 0: # if self.show_china and self.wait_days_count > 0:
# self.wait_days_count = self.wait_days - time_data.total_days # self.wait_days_count = self.wait_days - time_data.total_days
# #
...@@ -277,4 +302,4 @@ if __name__ == '__main__': ...@@ -277,4 +302,4 @@ if __name__ == '__main__':
""" """
# -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator # -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator
sim = LookAtSkyOnEarth() sim = LookAtSkyOnEarth()
sim.run(speed_factor=0.9) sim.run(speed_factor=0.75)
...@@ -15,4 +15,4 @@ if __name__ == '__main__': ...@@ -15,4 +15,4 @@ if __name__ == '__main__':
""" """
# -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator # -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator
sim = LookAtSkyOnEarth(look_point=0) sim = LookAtSkyOnEarth(look_point=0)
sim.run(speed_factor=0.85) sim.run(speed_factor=0.7000)
...@@ -15,4 +15,4 @@ if __name__ == '__main__': ...@@ -15,4 +15,4 @@ if __name__ == '__main__':
""" """
# -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator # -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator
sim = LookAtSkyOnEarth(look_point=-1) sim = LookAtSkyOnEarth(look_point=-1)
sim.run(speed_factor=0.85) sim.run(speed_factor=0.7000)
...@@ -15,4 +15,4 @@ if __name__ == '__main__': ...@@ -15,4 +15,4 @@ if __name__ == '__main__':
""" """
# -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator # -1:北半球 Northern Hemisphere, 1:南半球 Southern Hemisphere, 0:赤道 Equator
sim = LookAtSkyOnEarth(look_point=1) sim = LookAtSkyOnEarth(look_point=1)
sim.run(speed_factor=0.85) sim.run(speed_factor=0.7000)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册