# -*- 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.02 * 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 = [ Earth(name="A", rotation_speed=1, mass=mA, init_position=pA, init_velocity=vA, size_scale=5e1, distance_scale=1), Sun(name="B", rotation_speed=1, mass=mB, init_position=pB, init_velocity=vB, size_scale=5e1, distance_scale=1) ] # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- ursina_run(bodies, SECONDS_PER_YEAR, position=(r1, r1, -7 * r2), show_trail=True)