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

Python超人-宇宙模拟器

上级 10492b86
...@@ -19,7 +19,7 @@ from simulators.ursina.ursina_config import UrsinaConfig ...@@ -19,7 +19,7 @@ from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_event import UrsinaEvent
from ursina import application, camera, Vec3 from ursina import application, camera, Vec3
import math import math
from simulators.ursina.ursina_mesh import create_circle_line from simulators.ursina.ursina_mesh import create_circle_line, create_orbit_line
from ursina import color from ursina import color
...@@ -32,7 +32,7 @@ class EarthOrbitStoppedSim: ...@@ -32,7 +32,7 @@ class EarthOrbitStoppedSim:
def __init__(self): def __init__(self):
self.sun = Sun(init_position=[0, 0, 0], size_scale=1) self.sun = Sun(init_position=[0, 0, 0], size_scale=1)
self.earth = Earth(init_position=[0, 0, -AU], # texture="earth2.jpg", self.earth = Earth(init_position=[0, 0, -AU], # texture="earth2.jpg",
init_velocity=[0, self.EARTH_INIT_VELOCITY, 0], init_velocity=[0, self.EARTH_INIT_VELOCITY, 0],
size_scale=1).set_light_disable(True) size_scale=1).set_light_disable(True)
# 水星轨道半径 # 水星轨道半径
...@@ -73,7 +73,7 @@ class EarthOrbitStoppedSim: ...@@ -73,7 +73,7 @@ class EarthOrbitStoppedSim:
""" """
orbit_line = create_circle_line(parent=self.sun, radius=radius, thickness=5, color=color, alpha=0.3) orbit_line = create_circle_line(parent=self.sun, radius=radius, thickness=5, color=color, alpha=0.3)
orbit_line.rotation_x = 90 orbit_line.rotation_x = 90
orbit_line.enabled = False # 默认不显示 orbit_line.enabled = False # 默认不显示
return orbit_line return orbit_line
def on_ready(self): def on_ready(self):
...@@ -89,13 +89,9 @@ class EarthOrbitStoppedSim: ...@@ -89,13 +89,9 @@ class EarthOrbitStoppedSim:
replace("${acceleration}", "0") replace("${acceleration}", "0")
# 创建水星轨道线 # 创建水星轨道线
self.mercury_orbit_line = self.create_orbit_line( self.mercury_orbit_line = create_orbit_line(self.sun, self.mercury)
radius=self.mercury_radius * UrsinaConfig.SCALE_FACTOR,
color=self.mercury.color)
# 创建金星轨道线 # 创建金星轨道线
self.venus_orbit_line = self.create_orbit_line( self.venus_orbit_line = create_orbit_line(self.sun, self.venus)
radius=self.venus_radius * UrsinaConfig.SCALE_FACTOR,
color=self.venus.color)
def on_timer_changed(self, time_data: TimeData): def on_timer_changed(self, time_data: TimeData):
# 摄像机时时刻刻看向地球 # 摄像机时时刻刻看向地球
......
...@@ -33,15 +33,15 @@ class HalleyCometSim: ...@@ -33,15 +33,15 @@ class HalleyCometSim:
def build_solar_system(self): def build_solar_system(self):
# region 构建太阳系 # region 构建太阳系
self.sun = Sun(size_scale=0.8e2, show_trail=False) self.sun = Sun(size_scale=0.8e2, show_trail=False)
self.earth = Earth(size_scale=8e3, distance_scale=1, rotate_angle=0, show_trail=False) self.earth = Earth(size_scale=8e3, rotate_angle=0, show_trail=False)
self.mercury = Mercury(size_scale=4e3, distance_scale=1, show_trail=False) self.mercury = Mercury(size_scale=4e3, show_trail=False)
self.venus = Venus(size_scale=4e3, distance_scale=1, show_trail=False) self.venus = Venus(size_scale=4e3, show_trail=False)
self.mars = Mars(size_scale=4e3, distance_scale=1, show_trail=False) self.mars = Mars(size_scale=4e3, show_trail=False)
self.jupiter = Jupiter(size_scale=1.68e3, distance_scale=1, show_trail=False) self.jupiter = Jupiter(size_scale=1.68e3, show_trail=False)
self.saturn = Saturn(size_scale=1.68e3, distance_scale=1, show_trail=False) self.saturn = Saturn(size_scale=1.68e3, show_trail=False)
self.uranus = Uranus(size_scale=3.5e3, distance_scale=1, show_trail=False) self.uranus = Uranus(size_scale=3.5e3, show_trail=False)
self.neptune = Neptune(size_scale=3.5e3, distance_scale=1, show_trail=False) self.neptune = Neptune(size_scale=3.5e3, show_trail=False)
self.pluto = Pluto(size_scale=1.5e5, distance_scale=1, show_trail=False) self.pluto = Pluto(size_scale=1.5e5, show_trail=False)
self.bodies = [ self.bodies = [
self.sun, # 太阳 self.sun, # 太阳
self.mercury, # 水星 self.mercury, # 水星
...@@ -102,9 +102,6 @@ class HalleyCometSim: ...@@ -102,9 +102,6 @@ class HalleyCometSim:
orbit_line = create_orbit_line(self.sun, body) orbit_line = create_orbit_line(self.sun, body)
orbit_line.body = body orbit_line.body = body
self.orbit_lines.append(orbit_line) self.orbit_lines.append(orbit_line)
# orbit_line.parent = scene
# self.earth_orbit = create_orbit_line(self.sun, self.earth)
# self.pluto_orbit = create_orbit_line(self.sun, self.pluto, alpha=1)
self.text_panel = create_text_panel() self.text_panel = create_text_panel()
...@@ -125,17 +122,18 @@ class HalleyCometSim: ...@@ -125,17 +122,18 @@ class HalleyCometSim:
for i, orbit_line in enumerate(self.orbit_lines): for i, orbit_line in enumerate(self.orbit_lines):
if i < 4: if i < 4:
# 近日的天体绕行非常快,不调整轨道大小
continue continue
body = orbit_line.body body = orbit_line.body
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
distance = calculate_distance(self.sun.position - body.position) distance = calculate_distance(self.sun.position - body.position)
scale_rate = distance * UrsinaConfig.SCALE_FACTOR * 0.695 / orbit_line.radius scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius
orbit_line.scale = scale_rate orbit_line.scale = scale_rate
if __name__ == '__main__': if __name__ == '__main__':
""" """
三体二向箔场景模拟 哈雷彗星场景模拟
""" """
sim = HalleyCometSim() sim = HalleyCometSim()
sim.build() sim.build()
......
...@@ -26,7 +26,7 @@ class CircleLine(Entity): ...@@ -26,7 +26,7 @@ class CircleLine(Entity):
def create_circle_line(self): def create_circle_line(self):
angle_step = 360 / self.segments angle_step = 360 / self.segments
r = self.radius * 1.4363 r = self.radius # * 1.4363
for i in range(self.segments): for i in range(self.segments):
angle = math.radians(i * angle_step) angle = math.radians(i * angle_step)
next_angle = math.radians((i + 1) * angle_step) next_angle = math.radians((i + 1) * angle_step)
......
...@@ -212,7 +212,7 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al ...@@ -212,7 +212,7 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al
distance1 = (center_obj.planet.position - orbiting_obj.planet.position).length() distance1 = (center_obj.planet.position - orbiting_obj.planet.position).length()
# distance = calculate_distance(center_obj.position - orbiting_obj.position) # distance = calculate_distance(center_obj.position - orbiting_obj.position)
# distance2 = distance * UrsinaConfig.SCALE_FACTOR * 0.695 # / center_obj.planet.scale_x # * 0.0125 # distance2 = distance * UrsinaConfig.SCALE_FACTOR * 0.695 # / center_obj.planet.scale_x # * 0.0125
orbit_line = create_circle_line(parent=None, radius=distance1 * 0.695, position=center_obj.planet.position, orbit_line = create_circle_line(parent=None, radius=distance1, position=center_obj.planet.position,
thickness=thickness, color=line_color, thickness=thickness, color=line_color,
alpha=alpha) alpha=alpha)
orbit_line.rotation_x = 90 orbit_line.rotation_x = 90
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册