From 4c67a8b11b701de9367a457c618cf4e555a0347f Mon Sep 17 00:00:00 2001 From: march3 Date: Mon, 6 Nov 2023 13:31:20 +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_lab/wormhole_sim.py | 81 +++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/sim_lab/wormhole_sim.py b/sim_lab/wormhole_sim.py index 863f4b9..5f3eedf 100644 --- a/sim_lab/wormhole_sim.py +++ b/sim_lab/wormhole_sim.py @@ -16,7 +16,7 @@ from bodies import Body from simulators.ursina.ursina_event import UrsinaEvent ours_cosmic_bg = "bg_pan.jpg" -worms_cosmic_bg = "cosmic3.jpg" +worms_cosmic_bg = "bg_pan_red.jpg" class UniverseBody(Body): @@ -93,32 +93,33 @@ if __name__ == '__main__': """ # 代码案例如下: - SIZE_SCALE = 1e1 # 生成的太阳放大 50 倍 + SIZE_SCALE = 1 # 生成的太阳放大 50 倍 RUN_DIAMETER = 1.392e6 velocity_rate = 22 camera_target = CoreValagaClas(name="摄像机目标", mass=1e30, color=(111, 140, 255), - init_position=[0, 0, -AU], + # init_position=[0, 0, 0], + init_position=[0, 0, AU / 10], init_velocity=[0, 0, 0], size_scale=SIZE_SCALE * 1e1) # .set_ignore_gravity(True) ours_universe = OursUniverse( # size_scale=SIZE_SCALE * 1e3, - size_scale=SIZE_SCALE , - init_position=[0, 0, -AU], - init_velocity=[0, 0, 0], - ).set_ignore_gravity(True) + size_scale=SIZE_SCALE, + init_position=[0, 0, -AU/120], + init_velocity=[0, 0, 0], + ).set_ignore_gravity(True) worm_hole = WormHole( # init_position=[RUN_DIAMETER, RUN_DIAMETER, 0], - init_position=[0, 0, AU], - init_velocity=[0, 0, 0], - size_scale=SIZE_SCALE) # .set_ignore_gravity(True) + init_position=[0, 0, AU/120], + init_velocity=[0, 0, 0], + size_scale=SIZE_SCALE).set_ignore_gravity(True) bodies = [ - # camera_target, + camera_target, ours_universe, worm_hole ] - camera_position = [0, 0, 0] + # camera_position = [0, 0, 0] def on_ready(): @@ -134,33 +135,57 @@ if __name__ == '__main__': # camera.scale = 1000 # camera.parent = camera_target.planet # camera.rotation_x = 90 - camera_look_at(worm_hole) - camera.collider="sphere" - worm_hole.planet.collider="sphere" - ours_universe.planet.init_scale = SIZE_SCALE*1000 + + worm_hole.planet.rotation_y = 30 + ours_universe.planet.rotation_y = 130 + + camera_look_at(camera_target) + camera.collider = "sphere" + worm_hole.planet.collider = "sphere" + ours_universe.planet.init_scale = SIZE_SCALE * 1000 # camera_position = camera.position def on_timer_changed(time_data): global camera_position + # return # pass # camera_look_at(camera_target) # camera.rotation_x -= 2 - # camera_target.planet.look_at(worm_hole.planet) + camera_target.planet.look_at(worm_hole.planet) if camera.intersects(worm_hole.planet).hit: + # worm_hole.planet.init_scale = SIZE_SCALE * 1000 + ours_universe.planet.init_scale = SIZE_SCALE if worm_hole.planet.init_scale < SIZE_SCALE*1000: worm_hole.planet.init_scale *= 1.1 - if ours_universe.planet.init_scale > SIZE_SCALE: - ours_universe.planet.init_scale /= 1.1 - camera.rotation_y += 0.1 + # if ours_universe.planet.init_scale > SIZE_SCALE: + # ours_universe.planet.init_scale /= 1.1 + if not hasattr(camera, "init_rotation_y"): + camera.init_rotation_y = camera.rotation_y + camera.rotation_y_v = 0.01 + + if abs(camera.init_rotation_y - camera.rotation_y) < 10: + camera.rotation_y_v += 0.005 + elif abs(camera.init_rotation_y - camera.rotation_y) < 90: + camera.rotation_y_v += 0.01 + elif abs(camera.init_rotation_y - camera.rotation_y) < 120: + camera.rotation_y_v -= 0.01 + elif abs(camera.init_rotation_y - camera.rotation_y) < 180: + camera.rotation_y_v -= 0.01 + if camera.rotation_y_v < 0.1: + camera.rotation_y_v = 0.1 + else: + camera.rotation_y_v = 0 + camera.rotation_y += camera.rotation_y_v # camera_look_at(ours_universe) - else: - # if two_bodies_colliding(camera_target, worm_hole): - # camera_target.stop_and_ignore_gravity() - # print(1,camera_target.planet.position) - # camera_target.planet.position = lerp(camera_target.planet.position, worm_hole.planet.position, 1e-2) - # print(2,camera_target.planet.position) - camera.position = lerp(camera.position, worm_hole.planet.position, 1e-2) + # else: + # if two_bodies_colliding(camera_target, worm_hole): + # camera_target.stop_and_ignore_gravity() + # print(1,camera_target.planet.position) + # camera_target.planet.position = lerp(camera_target.planet.position, worm_hole.planet.position, 1e-2) + # print(2,camera_target.planet.position) + # camera.position = (camera.position[0],camera.position[1],camera.position[2]) # + camera.position = lerp(camera.position, camera_target.planet.position, 0.3e-2) # camera_position = [camera_position[0], camera_position[1], camera_position[2] - 0.01] # camera.position = camera_position @@ -177,6 +202,8 @@ if __name__ == '__main__': # position = 左-右+、上+下-、前+后- ursina_run(bodies, SECONDS_PER_DAY / 24, # position=(0, AU / 1200, -1.003 * AU), + # position=[-AU/100, 0, 0], + position=[0, 0, -AU/10], cosmic_bg='', # gravity_works=False, timer_enabled=True, -- GitLab