From 298ed28a193fcee1b26561f750631a8e4099afec Mon Sep 17 00:00:00 2001 From: march3 Date: Thu, 29 Jun 2023 20:49:08 +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/fiction/parallel_earths.py | 31 +++++++++++++++---------- sim_scenes/science/sun_earth_moon.py | 33 ++++----------------------- 2 files changed, 23 insertions(+), 41 deletions(-) diff --git a/sim_scenes/fiction/parallel_earths.py b/sim_scenes/fiction/parallel_earths.py index 4d93ef8..bb83abf 100644 --- a/sim_scenes/fiction/parallel_earths.py +++ b/sim_scenes/fiction/parallel_earths.py @@ -8,12 +8,11 @@ # ============================================================================== import random import sys -from bodies import Earth, Moon -from common.consts import SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH -from sim_scenes.func import ursina_run, camera_look_at + +from bodies import Earth +from common.consts import SECONDS_PER_DAY +from sim_scenes.func import ursina_run from simulators.ursina.entities.sphere_sky import SphereSky -from simulators.ursina.ursina_config import UrsinaConfig -from simulators.ursina.ursina_event import UrsinaEvent def sim_show(): @@ -47,32 +46,40 @@ def ursina_show(): 直接使用 ursina 模拟,无需考虑万有引力(性能高) @return: """ - from ursina import Ursina, Entity, color, EditorCamera, camera + from ursina import Ursina, Entity, EditorCamera, camera app = Ursina() # 黑色背景的宇宙背景 SphereSky(texture='../../textures/bg_black.png') # 控制地球的数量,这里的 num 不代表数量 - # 地球数量 = num_x * num_y * num_z num = 5 num_x = num * 2 num_y = num num_z = num * 2 + # 地球数量 = 2 * num_x * num_y * num_z + print("地球数量:", 2 * num_x * num_y * num_z) + # 控制运行的速度 run_speed = 0.1 # 控制地球之间的距离 - r = 10 + spacing = 20 - def create_earth(x, y, z): + def create_earth(x, y, z, aligned=False): """ 在指定的三维坐标上创建地球 @param x: @param y: @param z: + @param aligned: 排列整齐 @return: """ - earth = Entity(model="sphere", texture='../../textures/earth2.jpg', - x=x * r * 2, y=y * r, z=z * r * 2, scale=3) + if aligned: + xr, yr, zr = 0, 0, 0 + else: + xr, yr, zr = random.randint(20, 800) / 100, random.randint(20, 800) / 100, random.randint(20, 800) / 100 + + earth = Entity(model="sphere", texture='../../textures/earth1.jpg', + x=x * spacing * 2 + xr, y=y * spacing + yr, z=z * spacing * 2 + zr, scale=3) earth.name = "%s:%s:%s" % (x, y, z) def update(): @@ -94,7 +101,7 @@ def ursina_show(): ed = EditorCamera() camera.fov = 80 - ed.position = [0, 0, r/2] + ed.position = [0, 0, spacing / 2] # 控制摄像机三个维度的移动方向,值为 1 和 -1 camera.x_d = 1 diff --git a/sim_scenes/science/sun_earth_moon.py b/sim_scenes/science/sun_earth_moon.py index a1604ec..7c9df32 100644 --- a/sim_scenes/science/sun_earth_moon.py +++ b/sim_scenes/science/sun_earth_moon.py @@ -1,8 +1,8 @@ # -*- coding:utf-8 -*- -# title :地月场景模拟(观看月相变化的过程) -# description :地月场景模拟(观看月相变化的过程) +# title :地球年月的关系 +# description :地球年月的关系 # author :Python超人 -# date :2023-02-11 +# date :2023-07-01 # link :https://gitcode.net/pythoncr/ # python_version :3.8 # ============================================================================== @@ -17,33 +17,8 @@ import numpy as np if __name__ == '__main__': """ - 地月场景模拟 + 地球年月的关系 """ - # # 地球的Y方向初始速度 - # EARTH_INIT_VELOCITY = 0 # 0km/s - # sun = Sun(init_position=[0, 0, AU], size_scale=2e1) # 太阳放大 20 倍 - # # 忽略质量的引力 - # sun.ignore_mass = True - # - # # 观看月相变化的过程:分别是 新月、蛾眉月、上弦月、盈凸、满月、亏凸、下弦月、残月 - # # 参考:images/moon/月相变化过程.jpeg - # # TODO: 月球在摄像机的前方(从 “新月” 开始) - # moon_pos, moon_vel = [0, 0, 384400], [-(EARTH_INIT_VELOCITY + 1.03), 0, 0] - # # TODO: 月球在摄像机的右方(从 “下弦月” 开始),将会从右方出现 - # # moon_pos, moon_vel = [384400, 0, 0], [-EARTH_INIT_VELOCITY, 0, 1.03] - # # TODO: 月球在摄像机的左方(从 “上弦月” 开始) - # # moon_pos, moon_vel = [-384400, 0, 0], [EARTH_INIT_VELOCITY, 0, -1.03] - # moon = Moon(init_position=moon_pos, # 距地距离约: 363104 至 405696 km - # init_velocity=moon_vel, - # size_scale=2e1) # 月球放大 20 倍,距离保持不变 - # bodies = [ - # sun, - # Earth(init_position=[0, 0, 0], - # init_velocity=[0, EARTH_INIT_VELOCITY, 0], - # size_scale=1e1), # 地球放大 10 倍,距离保持不变 - # moon - # ] - sun = Sun(name="太阳", size_scale=1e2) # 太阳放大 100 倍,距离保持不变 earth = Earth(name="地球", size_scale=1.8e3) # 地球放大 1800 倍,距离保持不变 earth_moon_d = 20000000 # 因为地球放大 1800 倍,为了较好的效果,地月距离要比实际大才行 -- GitLab