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

Python超人-宇宙模拟器

上级 ec6c1c55
......@@ -25,7 +25,7 @@ from simulators.ursina.entities.entity_utils import get_value_direction_vectors
from simulators.ursina.ui.control_ui import ControlUI
from simulators.ursina.ursina_config import UrsinaConfig
from simulators.ursina.ursina_event import UrsinaEvent
from simulators.ursina.ursina_mesh import create_orbit_by_points
from simulators.ursina.ursina_mesh import create_orbit_by_points, create_label
from dataclasses import dataclass
from dataclasses import field
......@@ -181,6 +181,11 @@ class HalleyCometSim:
t = self.start_time + time_data.total_days
set_solar_system_celestial_position(self.bodies, t, False)
def create_year_label(self, trail, year, halley_comet_pos):
label = create_label(trail, label=year, pos=(0,0,0), color=(255, 255, 255), scale=40, alpha=1.0)
# label.udpate
label.set_light_off()
def on_timer_changed(self, time_data):
"""
......@@ -188,6 +193,8 @@ class HalleyCometSim:
@return:
"""
dt = time_data.get_datetime(str(self.start_time))
year = dt.strftime("%Y")
if hasattr(self, "halley_comet"):
# 哈雷彗星飞行的翻转效果
if self.halley_comet.planet.enabled:
......@@ -195,23 +202,30 @@ class HalleyCometSim:
# self.halley_comet.planet.rotation_y += 1
self.halley_comet.planet.look_at(self.sun.planet)
d_sun = calculate_distance(self.halley_comet.position, self.sun.position)
d_earth = calculate_distance(self.halley_comet.position, self.earth.position)
trail_keys = self.halley_comet.planet.trails.keys()
last_trail = list(trail_keys)[-1] # self.halley_comet.planet.trails[list(trail_keys)[-1]]
if hasattr(last_trail, "entity_infos"):
# print(last_trail.entity_infos)
last_trail.entity_infos["distance_from_sun"] = d_sun
last_trail.entity_infos["distance_from_earth"] = d_earth
last_trail.entity_infos["time"] = dt.strftime("%Y-%m-%d")
# print(last_trail.entity_infos)
panel_text = "哈雷彗星:\n距离太阳:%.3f AU" % (d_sun / AU)
panel_text += "\n距离地球:%.3f AU" % (d_earth / AU)
velocity, _ = get_value_direction_vectors(self.halley_comet.velocity)
panel_text += "\n当前速度:%.3f km/s" % velocity
self.text_panel.text = panel_text
d_sun = calculate_distance(self.halley_comet.position, self.sun.position)
d_earth = calculate_distance(self.halley_comet.position, self.earth.position)
trail_keys = self.halley_comet.planet.trails.keys()
last_trail = list(trail_keys)[-1] # self.halley_comet.planet.trails[list(trail_keys)[-1]]
if hasattr(last_trail, "entity_infos"):
# print(last_trail.entity_infos)
last_trail.entity_infos["distance_from_sun"] = d_sun
last_trail.entity_infos["distance_from_earth"] = d_earth
last_trail.entity_infos["time"] = dt.strftime("%Y-%m-%d")
# print(last_trail.entity_infos)
if not hasattr(self, "last_year"):
self.create_year_label(last_trail, year, self.halley_comet.planet.position)
elif self.last_year != year:
self.create_year_label(last_trail, year, self.halley_comet.planet.position)
self.last_year = year
panel_text = "哈雷彗星:\n距离太阳:%.3f AU" % (d_sun / AU)
panel_text += "\n距离地球:%.3f AU" % (d_earth / AU)
velocity, _ = get_value_direction_vectors(self.halley_comet.velocity)
panel_text += "\n当前速度:%.3f km/s" % velocity
self.text_panel.text = panel_text
self.set_bodies_position(time_data)
......
# -*- coding:utf-8 -*-
# title :标签对象
# description :标签对象
# author :Python超人
# date :2023-10-29
# link :https://gitcode.net/pythoncr/
# python_version :3.9
# ==============================================================================
from ursina import Text, color
class Label(Text):
def __init__(self, text='', position=(0, 0, 0), **kwargs):
# def __init__(self, text='', start_tag=start_tag, end_tag=end_tag, ignore=True, **kwargs):
super().__init__(
text=text,
position=position,
**kwargs
)
......@@ -18,6 +18,7 @@ from common.color_utils import conv_to_vec4_color
from common.func import calculate_distance
from simulators.ursina.entities.circle_line import CircleLine
from simulators.ursina.entities.orbit_line import OrbitLine
from simulators.ursina.entities.label import Label
from simulators.ursina.ursina_config import UrsinaConfig
......@@ -69,6 +70,11 @@ def create_sphere(radius, subdivisions):
return Mesh(vertices=verts, triangles=tris, normals=normals, uvs=uvs, mode='triangle')
# def create_label(text, position=(0, 0, 0)):
# label = Label(text=text, position=position)
# return label
def create_cone(radius, height, subdivisions, r=0.1):
"""
创建一个圆锥
......@@ -82,8 +88,8 @@ def create_cone(radius, height, subdivisions, r=0.1):
normals = [] # 法线列表
uvs = [] # UV坐标列表
p_h = r*height
d_h = (1-r)*height
p_h = r * height
d_h = (1 - r) * height
# 生成圆锥底部的顶点和UV坐标
for i in range(subdivisions):
......@@ -189,6 +195,10 @@ def create_arrow(height=0.5, width=0.1):
def create_label(parent, label, pos, color, scale=50, alpha=1.0):
if isinstance(color, tuple) or isinstance(color, list):
color = conv_to_vec4_color(color)
if alpha < 1:
color[3] = alpha
text = Text(label, parent=parent, scale=scale, billboard=True, color=color,
position=Vec3(pos) + Vec3(1, 1, 1), alpha=alpha,
font=UrsinaConfig.CN_FONT, background=False)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册