diff --git a/sim_scenes/tri_bodies/two_bodies_02.py b/sim_scenes/tri_bodies/two_bodies_02.py new file mode 100644 index 0000000000000000000000000000000000000000..a007917638a4b5b3a32d2fb2716961915220ee36 --- /dev/null +++ b/sim_scenes/tri_bodies/two_bodies_02.py @@ -0,0 +1,43 @@ +# -*- coding:utf-8 -*- +# title :两体场景模拟01 +# description :两体场景模拟01(2个太阳、1个地球) +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from bodies import Sun, Earth +from common.consts import SECONDS_PER_WEEK, SECONDS_PER_YEAR, SECONDS_PER_DAY, AU, G +from sim_scenes.func import mayavi_run, mpl_run, ursina_run +import math + +if __name__ == '__main__': + r2 = 0.5 * AU + r1 = 2 * r2 + # A、B 质量 + mA = 5.97237e24 + mB = 2 * mA + + pxA, pyA = 0, r1 + pxB, pyB = r1 + r2, r1 + # A、B 坐标 + pA, pB = [pxA, pyA, 0], [pxB, pyB, 0] + + vxA, vxB = 0, 0 + # 万有引力常量 *mA * mB/ math.pow(r1+r2,2) = mA*math.pow(vyA,2)/r1 + vyA = -math.sqrt((G * mA * mB) / math.pow(r1 * 1000 + r2 * 1000, 2) * r1 * 1000 / mA) + # 万有引力常量 *mA * mB/ math.pow(r1+r2,2) = mB*math.pow(vyB,2)/r2 + vyB = math.sqrt((G * mA * mB) / math.pow(r1 * 1000 + r2 * 1000, 2) * r2 * 1000 / mB) + vA, vB = [vxA, vyA / 1000, 0], [vxB, vyB / 1000, 0] + # vA, vB = [0,0,0],[0,0,0] + bodies = [ + Sun(name="A", rotation_speed=1, mass=mA, + init_position=pA, init_velocity=vA, size_scale=1.5e3, distance_scale=1).trail_color((255, 0, 0)), + Sun(name="B", rotation_speed=1, mass=mB, + init_position=pB, init_velocity=vB, size_scale=1.5e3, distance_scale=1) + ] + + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(bodies, SECONDS_PER_YEAR * 50, position=(r1, r1, -7 * r2), show_trail=True)