提交 0b202405 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 68e733fd
...@@ -15,6 +15,24 @@ import math ...@@ -15,6 +15,24 @@ import math
import time 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)): def get_dominant_colors(infile, resize=(20, 20)):
""" """
获取图片的主要颜色 获取图片的主要颜色
...@@ -106,7 +124,7 @@ def wait_for(secs): ...@@ -106,7 +124,7 @@ def wait_for(secs):
wait -= 1 wait -= 1
def calculate_acceleration(current_v , distance, t): def calculate_acceleration(current_v, distance, t):
""" """
计算加速度,使得当前物体到达目的距离需要的加速度 计算加速度,使得当前物体到达目的距离需要的加速度
@param current_v: 物体当前速度(km/s) @param current_v: 物体当前速度(km/s)
...@@ -117,9 +135,10 @@ def calculate_acceleration(current_v , distance, t): ...@@ -117,9 +135,10 @@ def calculate_acceleration(current_v , distance, t):
current_v = current_v * 1000 # km/s -> m/s current_v = current_v * 1000 # km/s -> m/s
distance = distance * 1000 # km -> m distance = distance * 1000 # km -> m
acceleration = 2 * (distance - current_v * t) / (t ** 2) 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 return acceleration
def calculate_distance(pos1, pos2=[0, 0, 0]): def calculate_distance(pos1, pos2=[0, 0, 0]):
""" """
计算两点间的距离 计算两点间的距离
......
...@@ -13,7 +13,7 @@ from bodies import Sun, Mercury, Venus, Earth, Mars, Asteroids, Jupiter, Saturn, ...@@ -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, \ 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 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 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 sim_scenes.universe_sim_scenes import UniverseSimScenes
from simulators.func import ext_fun_for_method from simulators.func import ext_fun_for_method
from simulators.ursina.entities.body_timer import TimeData from simulators.ursina.entities.body_timer import TimeData
...@@ -156,7 +156,24 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -156,7 +156,24 @@ class SolarSystemRealitySim(UniverseSimScenes):
delattr(self.earth.planet, "rotspeed") 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): def on_timer_changed(self, time_data: TimeData):
""" """
...@@ -171,6 +188,7 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -171,6 +188,7 @@ class SolarSystemRealitySim(UniverseSimScenes):
set_earth_rotation(self.earth, dt) set_earth_rotation(self.earth, dt)
# 显示时钟 # 显示时钟
# self.show_clock(dt) # self.show_clock(dt)
self.update_text_panel()
def bind_events(self): def bind_events(self):
# 运行中,每时每刻都会触发 on_timer_changed # 运行中,每时每刻都会触发 on_timer_changed
...@@ -373,7 +391,8 @@ class SolarSystemRealitySim(UniverseSimScenes): ...@@ -373,7 +391,8 @@ class SolarSystemRealitySim(UniverseSimScenes):
UrsinaConfig.run_speed_factor = 0.01 UrsinaConfig.run_speed_factor = 0.01
body.planet.origin_update = body.planet.update body.planet.origin_update = body.planet.update
size_scale, scale_x = self.body_scale_dict[body] 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 # scale_inc = (scale_x / size_scale) / 10.0
def update_scale(): def update_scale():
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册