From 968c1e39907ecc3475094ab45dd96867bdad5d90 Mon Sep 17 00:00:00 2001 From: march3 Date: Wed, 30 Aug 2023 20:41:18 +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/wonders/blue_moon.py | 101 ++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 sim_scenes/wonders/blue_moon.py diff --git a/sim_scenes/wonders/blue_moon.py b/sim_scenes/wonders/blue_moon.py new file mode 100644 index 0000000..0d9d0b9 --- /dev/null +++ b/sim_scenes/wonders/blue_moon.py @@ -0,0 +1,101 @@ +# -*- coding:utf-8 -*- +# title :地球年月的关系 +# description :地球年月的关系 +# author :Python超人 +# date :2023-07-01 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from bodies import Sun, Earth, Moon +from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH +from sim_scenes.func import mayavi_run, ursina_run, camera_look_at, set_camera_parent +from bodies.body import AU +from simulators.ursina.entities.body_timer import TimeData +from simulators.ursina.ursina_config import UrsinaConfig +from simulators.ursina.ursina_event import UrsinaEvent +import numpy as np + +sky, moon, moon_blue = None, None, None +if __name__ == '__main__': + """ + 地球年月的关系 + """ + resolution = 100 + # sun = Sun(name="太阳", size_scale=1e2) # 太阳放大 100 倍,距离保持不变 + # earth = Earth(name="地球", size_scale=1.8e3) # 地球放大 1800 倍,距离保持不变 + # earth_moon_d = 20000000 # 因为地球放大 1800 倍,为了较好的效果,地月距离要比实际大才行 + moon = Moon(name="月球", size_scale=9.002e3, # 月球球放大 3000 倍,为了较好的效果,地月距离要比实际大 + init_position=[0, 0, 0], + init_velocity=[0, 0, 0], + rotation_speed=0, + ignore_mass=True, + ).set_resolution(resolution) + + moon_blue = Moon(name="月球", size_scale=9.00e3, # 月球球放大 3000 倍,为了较好的效果,地月距离要比实际大 + init_position=[0, 0, 0], + init_velocity=[0, 0, 0], + rotation_speed=0, + texture='moon_blue.jpg', + ignore_mass=True, + ).set_resolution(resolution) + bodies = [ + # sun, earth, + moon, moon_blue + ] + + + def on_timer_changed(time_data: TimeData): + global sky, moon, moon_blue + from ursina import camera + if sky is not None: + sky.rotation_y += 0.005 + sky.rotation_x += 0.005 + + opacity = round((time_data.total_hours - 1) / 10, 2) + + if opacity > 1.0: + opacity = 1.0 + elif opacity < 0.0: + opacity = 0.0 + + if opacity >= 1.0: + moon.planet.enabled = False # 原火星完全消失 + + moon.planet.alpha = 1 - opacity # 原火星渐渐消失 + + + def on_ready(): + global sky, moon, moon_blue + camera_look_at(moon) + from ursina import camera + from simulators.ursina.entities.sphere_sky import SphereSky + from common.image_utils import find_texture + sky_texture = find_texture("bg_pan.jpg", None) + sky = SphereSky(texture=sky_texture) + sky.scale = 800 + sky.rotation_y = 90 + camera.fov = 65 + pass + + + # 订阅事件后,上面2个函数功能才会起作用 + # 运行前会触发 on_ready + UrsinaEvent.on_ready_subscription(on_ready) + # 运行中,每时每刻都会触发 on_timer_changed + UrsinaEvent.on_timer_changed_subscription(on_timer_changed) + + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + # position=(0, 0, 0) 的位置是站在地球视角,可以观看月相变化的过程 + ursina_run(bodies, + SECONDS_PER_HOUR / 2, + # SECONDS_PER_DAY / 10, + cosmic_bg='', + show_grid=False, + position=(0, AU / 2, 0), + show_control_info=False, + show_camera_info=False, + show_timer=False, + timer_enabled=True + ) -- GitLab