From 0b202405bce2605f61e5c44ea94d4d325c9dfb85 Mon Sep 17 00:00:00 2001 From: march3 Date: Sat, 9 Dec 2023 15:01:30 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/func.py | 23 +++++++++++++++-- .../solar_system/solar_system_reality_2.py | 25 ++++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/common/func.py b/common/func.py index bf3d6ff..e979cca 100644 --- a/common/func.py +++ b/common/func.py @@ -15,6 +15,24 @@ import math import time +def au_to_ly(au): + """ + 将天文单位转换为光年 + :param au: 天文单位 + :return: 光年 + """ + return au / 63241.0770847 + + +def ly_to_au(ly): + """ + 将光年转换为天文单位 + :param ly: 光年 + :return: 天文单位 + """ + return ly * 63241.0770847 + + def get_dominant_colors(infile, resize=(20, 20)): """ 获取图片的主要颜色 @@ -106,7 +124,7 @@ def wait_for(secs): wait -= 1 -def calculate_acceleration(current_v , distance, t): +def calculate_acceleration(current_v, distance, t): """ 计算加速度,使得当前物体到达目的距离需要的加速度 @param current_v: 物体当前速度(km/s) @@ -117,9 +135,10 @@ def calculate_acceleration(current_v , distance, t): current_v = current_v * 1000 # km/s -> m/s distance = distance * 1000 # km -> m acceleration = 2 * (distance - current_v * t) / (t ** 2) - acceleration = acceleration/1000 # m/s^2 -> km/s^2 + acceleration = acceleration / 1000 # m/s^2 -> km/s^2 return acceleration + def calculate_distance(pos1, pos2=[0, 0, 0]): """ 计算两点间的距离 diff --git a/sim_scenes/solar_system/solar_system_reality_2.py b/sim_scenes/solar_system/solar_system_reality_2.py index e74d080..8c53980 100644 --- a/sim_scenes/solar_system/solar_system_reality_2.py +++ b/sim_scenes/solar_system/solar_system_reality_2.py @@ -13,7 +13,7 @@ from bodies import Sun, Mercury, Venus, Earth, Mars, Asteroids, Jupiter, Saturn, from common.celestial_data_service import get_body_posvel, recalc_moon_position, calc_solar_acceleration, \ set_solar_system_celestial_position, set_earth_rotation, get_reality_orbit_points from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, AU -from sim_scenes.func import ursina_run, create_sphere_sky +from sim_scenes.func import ursina_run, create_sphere_sky, create_text_panel from sim_scenes.universe_sim_scenes import UniverseSimScenes from simulators.func import ext_fun_for_method from simulators.ursina.entities.body_timer import TimeData @@ -156,7 +156,24 @@ class SolarSystemRealitySim(UniverseSimScenes): delattr(self.earth.planet, "rotspeed") # 设置后,可以调整鼠标键盘的控制速度 - application.time_scale = 1 + application.time_scale = 5 + + self.text_panel = create_text_panel(font="fonts/DroidSansFallback.ttf", font_scale=1.3) + self.text_panel.parent.scale_y /= 6 + self.text_panel.scale_y *= 6 + + def update_text_panel(self): + """ + 更新文字信息面板 + @param d_sun: + @return: + """ + from ursina import distance + d_sun = distance(self.sun.planet.position, camera.position) + d_sun = d_sun / UrsinaConfig.SCALE_FACTOR / AU + panel_text = "当前日距:%s AU" % "{:.2f}".format(d_sun) # .rjust(6, "0") + + self.text_panel.text = panel_text def on_timer_changed(self, time_data: TimeData): """ @@ -171,6 +188,7 @@ class SolarSystemRealitySim(UniverseSimScenes): set_earth_rotation(self.earth, dt) # 显示时钟 # self.show_clock(dt) + self.update_text_panel() def bind_events(self): # 运行中,每时每刻都会触发 on_timer_changed @@ -373,7 +391,8 @@ class SolarSystemRealitySim(UniverseSimScenes): UrsinaConfig.run_speed_factor = 0.01 body.planet.origin_update = body.planet.update size_scale, scale_x = self.body_scale_dict[body] - scale_inc = (scale_x - scale_x/size_scale) / 200.0 + scale_inc = (scale_x - scale_x / size_scale) / 200.0 + # scale_inc = (scale_x / size_scale) / 10.0 def update_scale(): -- GitLab