提交 298ed28a 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 828c78b5
......@@ -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
......
# -*- 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 倍,为了较好的效果,地月距离要比实际大才行
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册