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

Python超人-宇宙模拟器

上级 ecda749a
# -*- 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
...@@ -11,33 +11,17 @@ from ursina import camera ...@@ -11,33 +11,17 @@ from ursina import camera
from bodies import Sun, Earth from bodies import Sun, Earth
from common.consts import SECONDS_PER_DAY, AU from common.consts import SECONDS_PER_DAY, AU
from sim_scenes.func import ursina_run, camera_look_at 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.entities.body_timer import TimeData, BodyTimer
from simulators.ursina.ursina_event import UrsinaEvent 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__': if __name__ == '__main__':
""" """
摄像机以太阳的视角看地球(四季和24节气) 摄像机以太阳的视角看地球(四季和24节气)
""" """
sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机 sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机
# 在 4 个节气的位置创建固定不动的透明地球 # 在 4 个节气的位置创建固定不动的透明地球
earth_1 = create_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0]) earth_1, earth_2, earth_3, earth_4 = create_important_pos_earths()
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 = Earth(size_scale=5e3, texture="earth_hd.jpg", earth = Earth(size_scale=5e3, texture="earth_hd.jpg",
text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时 text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时
...@@ -56,14 +40,7 @@ if __name__ == '__main__': ...@@ -56,14 +40,7 @@ if __name__ == '__main__':
] ]
# 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值
solar_terms_angles = [ solar_terms_angles = get_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)]
def on_ready(): def on_ready():
......
...@@ -11,6 +11,7 @@ from ursina import camera ...@@ -11,6 +11,7 @@ from ursina import camera
from bodies import Sun, Earth from bodies import Sun, Earth
from common.consts import SECONDS_PER_DAY, AU from common.consts import SECONDS_PER_DAY, AU
from sim_scenes.func import ursina_run, camera_look_at, create_sphere_sky 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.entities.body_timer import TimeData, BodyTimer
from simulators.ursina.ursina_event import UrsinaEvent from simulators.ursina.ursina_event import UrsinaEvent
...@@ -36,10 +37,8 @@ if __name__ == '__main__': ...@@ -36,10 +37,8 @@ if __name__ == '__main__':
""" """
sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机 sun = Sun(size_scale=5e1, texture="transparent.png") # 太阳使用透明纹理,不会遮挡摄像机
# 在 4 个节气的位置创建固定不动的透明地球 # 在 4 个节气的位置创建固定不动的透明地球
earth_1 = create_earth(name="春分", text_color=(0, 255, 0), position=[-1.05 * AU, 0, 0]) earth_1, earth_2, earth_3, earth_4 = create_important_pos_earths()
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 = Earth(size_scale=5e3, texture="earth-huge.jpg", earth = Earth(size_scale=5e3, texture="earth-huge.jpg",
text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时 text_color=[255, 255, 255], rotation_speed=0.5, # 为演示效果,自转角速度取0.5度/小时,实际为15度/小时
...@@ -63,14 +62,7 @@ if __name__ == '__main__': ...@@ -63,14 +62,7 @@ if __name__ == '__main__':
] ]
# 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值 # 中国农历24节气表,数据为 节气名称 和 camera.rotation_y 的角度范围值
solar_terms_angles = [ solar_terms_angles = get_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)]
def on_ready(): def on_ready():
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册