From 029fba4d2c116e4b815f2021664bc0c1b375f318 Mon Sep 17 00:00:00 2001 From: march3 Date: Mon, 23 Oct 2023 09:44:19 +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_season_func.py | 49 +++++++++++++++++++++++++ sim_scenes/science/earth_seasons.py | 29 ++------------- sim_scenes/science/earth_seasons_2.py | 16 ++------ 3 files changed, 56 insertions(+), 38 deletions(-) create mode 100644 sim_scenes/science/earth_season_func.py diff --git a/sim_scenes/science/earth_season_func.py b/sim_scenes/science/earth_season_func.py new file mode 100644 index 0000000..1b839ee --- /dev/null +++ b/sim_scenes/science/earth_season_func.py @@ -0,0 +1,49 @@ +# -*- coding:utf-8 -*- +# title :地球季节(四季和24节气)函数功能 +# description : +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from ursina import camera + +from bodies import Sun, Earth +from common.consts import SECONDS_PER_DAY, AU + +def create_trans_earth(name, text_color, position): + """ + 创建透明的地球 + @param name: 名称 + @param text_color: 文字颜色 + @param position: 地球的位置 + @return: + """ + return Earth(name=name, size_scale=5e3, texture="earth_transparent.png", # 明的地球纹理 + text_color=text_color, rotation_speed=0, + init_position=position, init_velocity=[0, 0, 0]).set_ignore_gravity(True) # 忽略重力 + + +def create_important_pos_earths(): + earth_1 = create_trans_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0]) + earth_2 = create_trans_earth(name="夏至", text_color=(255, 0, 0), position=[0, 0, -1.05 * AU]) + earth_3 = create_trans_earth(name="秋分", text_color=(255, 255, 0), position=[1.05 * AU, 0, 0]) + earth_4 = create_trans_earth(name="冬至", text_color=(0, 255, 255), position=[0, 0, 1.05 * AU]) + return earth_1, earth_2, earth_3, earth_4 + + + +def get_solar_terms_angles(): + """ + 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 + @return: + """ + solar_terms_angles = [ + ("小寒", -22.5, -7.5), ("大寒", -37.5, -22.5), ("立春", -52.5, -37.5), ("雨水", -67.5, -52.5), + ("惊蛰", -82.5, -67.5), ("春分", -97.5, -82.5), ("清明", -112.5, -97.5), ("谷雨", -127.5, -112.5), + ("立夏", -142.5, -127.5), ("小满", -157.5, -142.5), ("芒种", -172.5, -157.5), + ("夏至", -180, -172.5), ("夏至", 172.5, 180), + ("小暑", 157.5, 172.5), ("大暑", 142.5, 157.5), ("立秋", 127.5, 142.5), ("处暑", 112.5, 127.5), + ("白露", 97.5, 112.5), ("秋分", 82.5, 97.5), ("寒露", 67.5, 82.5), ("霜降", 52.5, 67.5), + ("立冬", 37.5, 52.5), ("小雪", 22.5, 37.5), ("大雪", 7.5, 22.5), ("冬至", -7.5, 7.5)] + return solar_terms_angles \ No newline at end of file diff --git a/sim_scenes/science/earth_seasons.py b/sim_scenes/science/earth_seasons.py index 66778b9..183134d 100644 --- a/sim_scenes/science/earth_seasons.py +++ b/sim_scenes/science/earth_seasons.py @@ -11,33 +11,17 @@ from ursina import camera from bodies import Sun, Earth from common.consts import SECONDS_PER_DAY, AU from sim_scenes.func import ursina_run, camera_look_at +from sim_scenes.science.earth_season_func import create_important_pos_earths, get_solar_terms_angles from simulators.ursina.entities.body_timer import TimeData, BodyTimer from simulators.ursina.ursina_event import UrsinaEvent - -def create_earth(name, text_color, position): - """ - 创建透明的地球 - @param name: 名称 - @param text_color: 文字颜色 - @param position: 地球的位置 - @return: - """ - return Earth(name=name, size_scale=5e3, texture="earth_transparent.png", # 明的地球纹理 - text_color=text_color, rotation_speed=0, - init_position=position, init_velocity=[0, 0, 0]).set_ignore_gravity(True) # 忽略重力 - - if __name__ == '__main__': """ 摄像机以太阳的视角看地球(四季和24节气) """ sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机 # 在 4 个节气的位置创建固定不动的透明地球 - earth_1 = create_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0]) - earth_2 = create_earth(name="夏至", text_color=(255, 0, 0), position=[0, 0, -1.05 * AU]) - earth_3 = create_earth(name="秋分", text_color=(255, 255, 0), position=[1.05 * AU, 0, 0]) - earth_4 = create_earth(name="冬至", text_color=(0, 255, 255), position=[0, 0, 1.05 * AU]) + earth_1, earth_2, earth_3, earth_4 = create_important_pos_earths() # 运动的地球 earth = Earth(size_scale=5e3, texture="earth_hd.jpg", text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时 @@ -56,14 +40,7 @@ if __name__ == '__main__': ] # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 - solar_terms_angles = [ - ("小寒", -22.5, -7.5), ("大寒", -37.5, -22.5), ("立春", -52.5, -37.5), ("雨水", -67.5, -52.5), - ("惊蛰", -82.5, -67.5), ("春分", -97.5, -82.5), ("清明", -112.5, -97.5), ("谷雨", -127.5, -112.5), - ("立夏", -142.5, -127.5), ("小满", -157.5, -142.5), ("芒种", -172.5, -157.5), - ("夏至", -180, -172.5), ("夏至", 172.5, 180), - ("小暑", 157.5, 172.5), ("大暑", 142.5, 157.5), ("立秋", 127.5, 142.5), ("处暑", 112.5, 127.5), - ("白露", 97.5, 112.5), ("秋分", 82.5, 97.5), ("寒露", 67.5, 82.5), ("霜降", 52.5, 67.5), - ("立冬", 37.5, 52.5), ("小雪", 22.5, 37.5), ("大雪", 7.5, 22.5), ("冬至", -7.5, 7.5)] + solar_terms_angles = get_solar_terms_angles() def on_ready(): diff --git a/sim_scenes/science/earth_seasons_2.py b/sim_scenes/science/earth_seasons_2.py index 180b8d0..5126fb0 100644 --- a/sim_scenes/science/earth_seasons_2.py +++ b/sim_scenes/science/earth_seasons_2.py @@ -11,6 +11,7 @@ from ursina import camera from bodies import Sun, Earth from common.consts import SECONDS_PER_DAY, AU from sim_scenes.func import ursina_run, camera_look_at, create_sphere_sky +from sim_scenes.science.earth_season_func import get_solar_terms_angles, create_important_pos_earths from simulators.ursina.entities.body_timer import TimeData, BodyTimer from simulators.ursina.ursina_event import UrsinaEvent @@ -36,10 +37,8 @@ if __name__ == '__main__': """ sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机 # 在 4 个节气的位置创建固定不动的透明地球 - earth_1 = create_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0]) - earth_2 = create_earth(name="夏至", text_color=(255, 0, 0), position=[0, 0, -1.05 * AU]) - earth_3 = create_earth(name="秋分", text_color=(255, 255, 0), position=[1.05 * AU, 0, 0]) - earth_4 = create_earth(name="冬至", text_color=(0, 255, 255), position=[0, 0, 1.05 * AU]) + earth_1, earth_2, earth_3, earth_4 = create_important_pos_earths() + # 运动的地球 earth = Earth(size_scale=5e3, texture="earth-huge.jpg", text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时 @@ -63,14 +62,7 @@ if __name__ == '__main__': ] # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 - solar_terms_angles = [ - ("小寒", -22.5, -7.5), ("大寒", -37.5, -22.5), ("立春", -52.5, -37.5), ("雨水", -67.5, -52.5), - ("惊蛰", -82.5, -67.5), ("春分", -97.5, -82.5), ("清明", -112.5, -97.5), ("谷雨", -127.5, -112.5), - ("立夏", -142.5, -127.5), ("小满", -157.5, -142.5), ("芒种", -172.5, -157.5), - ("夏至", -180, -172.5), ("夏至", 172.5, 180), - ("小暑", 157.5, 172.5), ("大暑", 142.5, 157.5), ("立秋", 127.5, 142.5), ("处暑", 112.5, 127.5), - ("白露", 97.5, 112.5), ("秋分", 82.5, 97.5), ("寒露", 67.5, 82.5), ("霜降", 52.5, 67.5), - ("立冬", 37.5, 52.5), ("小雪", 22.5, 37.5), ("大雪", 7.5, 22.5), ("冬至", -7.5, 7.5)] + solar_terms_angles = get_solar_terms_angles() def on_ready(): -- GitLab