From 79fab0ed702d0fef13cf7fe19ddef21723ac6a40 Mon Sep 17 00:00:00 2001 From: march3 Date: Thu, 29 Jun 2023 12:59:26 +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/earth/parallel_earths.py | 108 ++++++++++++++++++++++++++++ textures/bg_black.png | Bin 0 -> 2829 bytes 2 files changed, 108 insertions(+) create mode 100644 sim_scenes/earth/parallel_earths.py create mode 100644 textures/bg_black.png diff --git a/sim_scenes/earth/parallel_earths.py b/sim_scenes/earth/parallel_earths.py new file mode 100644 index 0000000..fe3cee2 --- /dev/null +++ b/sim_scenes/earth/parallel_earths.py @@ -0,0 +1,108 @@ +# -*- coding:utf-8 -*- +# title :平行宇宙的地球们 +# description :平行宇宙的地球们 +# author :Python超人 +# date :2023-07-01 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +import random + +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 simulators.ursina.entities.sphere_sky import SphereSky +from simulators.ursina.ursina_config import UrsinaConfig +from simulators.ursina.ursina_event import UrsinaEvent + + +def sim_show(): + bodies = [] + num = 2 + r = 30000 + for x in range(-num, num): + for y in range(-num, num): + for z in range(-num, num): + earth = Earth(init_position=[r * x, r * y, r * z], + rotation_speed=0, + rotate_angle=0, + init_velocity=[0, 0, 0], size_scale=1, ignore_mass=True) + # earth.rotation_speed /= 50 # 地球的转速降低50倍 + bodies.append(earth) + + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(bodies, SECONDS_PER_DAY, + position=(0, 0, -r * num * 6), show_grid=False + ) + + +def ursina_show(): + from ursina import Ursina, Entity, color, EditorCamera, camera + app = Ursina() + SphereSky(texture='../../textures/bg_black.png') + num = 5 + num_x = num * 2 + num_y = num + num_z = num * 2 + r = 10 + + def create_sphere(x, y, z): + sphere = Entity(model="sphere", texture='../../textures/earth2.jpg', + x=x * r * 2, y=y * r, z=z * r * 2, scale=3) + sphere.name = "%s:%s:%s" % (x, y, z) + + def update(): + def inner(s, b): + if not hasattr(s, "initial_y"): + s.rotation_y -= 1 + # print(s.name, s.rotation_y) + + return inner(sphere, y) + + sphere.update = update + + for x in range(-num_x, num_x): + for y in range(-num_y, num_y): + for z in range(-num_z, num_z): + create_sphere(x, y, z) + + ed = EditorCamera() + camera.fov = 80 + ed.position = [0, 0, r/2] + import sys + camera.x_d = 1 + camera.y_d = 1 + camera.z_d = 1 + + def camera_update(): + camera.world_rotation_y += 0.05 + camera.world_rotation_z += 0.01 + # camera.x += ((random.randint(100, 300) - 100) / 3000) * camera.x_d + camera.y += ((random.randint(100, 300) - 100) / 5000) * camera.y_d + # camera.z += ((random.randint(100, 300) - 100) / 3000) * camera.z_d + range_val = 5 + # if camera.x > range_val: + # camera.x_d = -1 + # elif camera.x < -range_val: + # camera.x_d = 1 + if camera.y > range_val: + camera.y_d = -1 + elif camera.y < -range_val: + camera.y_d = 1 + # if camera.z > range_val: + # camera.z_d = -1 + # elif camera.z < -range_val: + # camera.z_d = 1 + + sys.modules["__main__"].update = camera_update + app.run() + + +if __name__ == '__main__': + """ + 平行宇宙的地球们 + """ + # sim_show() + ursina_show() diff --git a/textures/bg_black.png b/textures/bg_black.png new file mode 100644 index 0000000000000000000000000000000000000000..43bd9410cea9aa7fb6ed7e9a0fbdb5e2097ad800 GIT binary patch literal 2829 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 literal 0 HcmV?d00001 -- GitLab