From 7fd5314f64b65572139bd3b10d7fc726c9dd996a Mon Sep 17 00:00:00 2001 From: march3 Date: Sat, 10 Jun 2023 16:48:31 +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 --- sim_scenes/science/earth_seasons.py | 6 +++-- sim_scenes/science/lagrangian_points_2.py | 14 +++++++----- simulators/ursina/entities/body_timer.py | 28 +++++++++++++++-------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/sim_scenes/science/earth_seasons.py b/sim_scenes/science/earth_seasons.py index 17415e1..0df8f0d 100644 --- a/sim_scenes/science/earth_seasons.py +++ b/sim_scenes/science/earth_seasons.py @@ -6,12 +6,13 @@ # link :https://gitcode.net/pythoncr/ # python_version :3.8 # ============================================================================== +from ursina import camera + from bodies import Sun, Earth -from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, AU +from common.consts import SECONDS_PER_DAY, AU from sim_scenes.func import ursina_run, camera_look_at from simulators.ursina.entities.body_timer import TimeData, BodyTimer from simulators.ursina.ursina_event import UrsinaEvent -from ursina import camera def create_earth(name, text_color, position): @@ -101,6 +102,7 @@ if __name__ == '__main__': UrsinaEvent.on_ready_subscription(on_ready) # 运行中,每时每刻都会触发 on_timer_changed UrsinaEvent.on_timer_changed_subscription(on_timer_changed) + # 设置计时器的最小时间单位为天 BodyTimer().min_unit = BodyTimer.MIN_UNIT_DAYS # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 diff --git a/sim_scenes/science/lagrangian_points_2.py b/sim_scenes/science/lagrangian_points_2.py index 0630b06..c294df0 100644 --- a/sim_scenes/science/lagrangian_points_2.py +++ b/sim_scenes/science/lagrangian_points_2.py @@ -6,14 +6,15 @@ # link :https://gitcode.net/pythoncr/ # python_version :3.8 # ============================================================================== +import math + from bodies import Earth, Moon -from objs import Satellite, Satellite2 -from common.consts import SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH +from common.consts import SECONDS_PER_HOUR +from objs import Satellite from sim_scenes.func import ursina_run, camera_look_at -from simulators.ursina.entities.body_timer import TimeData +from simulators.ursina.entities.body_timer import TimeData, BodyTimer from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_mesh import create_connecting_lines -import math # 月球绕地球的半径 R = 363104 @@ -73,7 +74,7 @@ if __name__ == '__main__': if hasattr(earth, "lines"): for line in earth.lines: destroy(line) - if int(time_data.total_hours) % 3 == 0: + if int(time_data.total_hours) % 8 == 0: # 创建连接线(将卫星列表用线条连接起来) earth.lines = create_connecting_lines([ [satelliteL2, satelliteL3], @@ -88,7 +89,8 @@ if __name__ == '__main__': UrsinaEvent.on_ready_subscription(on_ready) # 运行中,每时每刻都会触发 on_timer_changed UrsinaEvent.on_timer_changed_subscription(on_timer_changed) - + # 设置计时器的最小时间单位为分钟 + BodyTimer().min_unit = BodyTimer.MIN_UNIT_MINUTES bodies = [earth, moon, satelliteL1, satelliteL2, satelliteL3, satelliteL4, satelliteL5] # 使用 ursina 查看的运行效果 diff --git a/simulators/ursina/entities/body_timer.py b/simulators/ursina/entities/body_timer.py index a57dfab..6a46031 100644 --- a/simulators/ursina/entities/body_timer.py +++ b/simulators/ursina/entities/body_timer.py @@ -33,16 +33,24 @@ class TimeData: self.seconds = int(seconds) self.min_unit = min_unit - if days > 1 or years >= 1 or self.min_unit in [BodyTimer.MIN_UNIT_DAYS, BodyTimer.MIN_UNIT_YEARS]: - s_days = str(days).rjust(3, " ") - if self.min_unit in [BodyTimer.MIN_UNIT_YEARS]: - self.time_text = f'{self.years}年' - elif days >= 20 or years >= 1 or self.min_unit in [BodyTimer.MIN_UNIT_DAYS]: - self.time_text = f'{self.years}年{s_days}天' - else: - self.time_text = f'{self.days}天 {self.hours:02d}:{self.minutes:02d}:{self.seconds:02d}' + s_days = str(days).rjust(3, " ") + + if self.min_unit in [BodyTimer.MIN_UNIT_YEARS]: + self.time_text = f'{self.years}年' + elif self.min_unit in [BodyTimer.MIN_UNIT_DAYS]: + self.time_text = f'{self.years}年{s_days}天' + elif self.min_unit in [BodyTimer.MIN_UNIT_MINUTES]: + self.time_text = f'{self.days}天 {self.hours:02d}:{self.minutes:02d}' + elif self.min_unit in [BodyTimer.MIN_UNIT_HOURS]: + self.time_text = f'{self.days}天 {self.hours:02d}时' else: - self.time_text = f'{self.hours:02d}:{self.minutes:02d}:{self.seconds:02d}' + if days > 1 or years >= 1: + if days >= 20 or years >= 1: + self.time_text = f'{self.years}年{s_days}天' + else: + self.time_text = f'{self.days}天 {self.hours:02d}:{self.minutes:02d}:{self.seconds:02d}' + else: + self.time_text = f'{self.hours:02d}:{self.minutes:02d}:{self.seconds:02d}' @property def total_minutes(self): @@ -65,6 +73,8 @@ class BodyTimer(Singleton): 最后通过公式: 时间 = 距离 / 速度, 从而得到天体运行了多长时间 """ MIN_UNIT_SECONDS = "seconds" + MIN_UNIT_MINUTES = "minutes" + MIN_UNIT_HOURS = "hours" MIN_UNIT_DAYS = "days" MIN_UNIT_YEARS = "years" -- GitLab