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

Python超人-宇宙模拟器

上级 02655b81
...@@ -145,12 +145,16 @@ class EarthOrbitStoppedSim: ...@@ -145,12 +145,16 @@ class EarthOrbitStoppedSim:
# 进入了水星轨道附近,才显示水星轨道线 # 进入了水星轨道附近,才显示水星轨道线
if mercury_range[0] - 2 < time_data.total_days < mercury_range[1]: if mercury_range[0] - 2 < time_data.total_days < mercury_range[1]:
self.mercury_orbit_line.enabled = True self.mercury_orbit_line.enabled = True
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
self.mercury_orbit_line.auto_adj_scale()
else: else:
self.mercury_orbit_line.enabled = False self.mercury_orbit_line.enabled = False
# 进入了金星轨道附近,才显示金星轨道线 # 进入了金星轨道附近,才显示金星轨道线
if venus_range[0] - 2 < time_data.total_days < venus_range[1]: if venus_range[0] - 2 < time_data.total_days < venus_range[1]:
self.venus_orbit_line.enabled = True self.venus_orbit_line.enabled = True
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
self.venus_orbit_line.auto_adj_scale()
else: else:
self.venus_orbit_line.enabled = False self.venus_orbit_line.enabled = False
......
...@@ -124,11 +124,8 @@ class HalleyCometSim: ...@@ -124,11 +124,8 @@ class HalleyCometSim:
if i < 4: if i < 4:
# 近日的天体绕行非常快,不调整轨道大小 # 近日的天体绕行非常快,不调整轨道大小
continue continue
body = orbit_line.body
# 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置 # 由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
distance = calculate_distance(self.sun.position - body.position) orbit_line.auto_adj_scale()
scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius
orbit_line.scale = scale_rate
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -197,7 +197,37 @@ def get_obj_planet_position(obj): ...@@ -197,7 +197,37 @@ def get_obj_planet_position(obj):
return pos1 return pos1
def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, alpha=0.6): def adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line):
"""
由于天体运行不是标准的圆形,则需要动态调整轨道的大小,保证轨道线始终在天体的中心位置
@param center_obj: 中心天体,一般为恒星天体
@param orbiting_obj: 绕行天体,一般为行星天体
@param orbit_line: 绕行天体轨道,一般为行星轨道
@return:
"""
#
distance = calculate_distance(center_obj.position - orbiting_obj.position)
scale_rate = distance * UrsinaConfig.SCALE_FACTOR / orbit_line.radius
# 根据距离调整缩放
orbit_line.scale = scale_rate
# 保证轨道中心的位置始终是中心天体的位置
orbit_line.position = center_obj.planet.position
def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, alpha=0.6,
rotation_x=90, rotation_y=None, rotation_z=None):
"""
创建轨道
@param center_obj: 中心天体,一般为恒星天体
@param orbiting_obj: 绕行天体,一般为行星天体
@param thickness: 轨道线的粗细
@param line_color: 轨道线颜色,默认为绕行天体的拖尾颜色
@param alpha: 轨道线的透明度
@param rotation_x:
@param rotation_y:
@param rotation_z:
@return:
"""
if isinstance(line_color, tuple) or isinstance(line_color, list): if isinstance(line_color, tuple) or isinstance(line_color, list):
line_color = color.rgba(line_color[0] / 255, line_color[1] / 255, line_color[2] / 255, alpha) line_color = color.rgba(line_color[0] / 255, line_color[1] / 255, line_color[2] / 255, alpha)
if line_color is None: if line_color is None:
...@@ -206,16 +236,22 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al ...@@ -206,16 +236,22 @@ def create_orbit_line(center_obj, orbiting_obj, thickness=5, line_color=None, al
line_color = color.white line_color = color.white
else: else:
line_color = color.rgba(line_color[0], line_color[1], line_color[2], alpha) line_color = color.rgba(line_color[0], line_color[1], line_color[2], alpha)
# line_color = adjust_brightness(line_color, 0.6)
# center_pos = get_obj_planet_position(center_obj) distance = (center_obj.planet.position - orbiting_obj.planet.position).length()
# orbiting_pos = get_obj_planet_position(orbiting_obj) orbit_line = create_circle_line(parent=None, radius=distance, position=center_obj.planet.position,
distance1 = (center_obj.planet.position - orbiting_obj.planet.position).length()
# distance = calculate_distance(center_obj.position - orbiting_obj.position)
# distance2 = distance * UrsinaConfig.SCALE_FACTOR * 0.695 # / center_obj.planet.scale_x # * 0.0125
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 if rotation_x is not None:
orbit_line.rotation_x = rotation_x
if rotation_y is not None:
orbit_line.rotation_y = rotation_y
if rotation_z is not None:
orbit_line.rotation_z = rotation_z
def adj_scale():
adj_orbit_line_scale(center_obj, orbiting_obj, orbit_line)
orbit_line.auto_adj_scale = adj_scale
# orbit_line.enabled = False # 默认不显示 # orbit_line.enabled = False # 默认不显示
return orbit_line return orbit_line
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册