系统建模与仿真技术-实验:太阳-月亮-地球天体模型建立(地月日模型) 基于python

1.实验目的

        建立地球-月球-太阳的模型。
        用到了欧拉公式求数值积分。
        用到了向心力公式、万有引力公式、加速度公式、速度公式、位移公式。

2.实验代码

# 天空ak 2023322060117
import math
import matplotlib.pyplot as plt
m_sun=200000.0   
m_ear=1.0   
m_mon=0.1   
G=1   
xte=[];ute=[];yte=[];vte=[];
xtm=[];utm=[];ytm=[];vtm=[];
xts=[];yts=[];

dt=0.5;   

xe = 3500.0;   
ye = 0.0;   
ue = 0.0;  
ve = math.pow(m_sun/xe, 1/2);

xm = 10.0;      #地月x轴距离
ym = 0.0;       #地月y轴距离
um = 0.0;       #月球x轴速度
vm = math.pow(m_ear/xm, 1/2);    # 月球y轴方向速度


for i in range(10000):
    
    xte.append(xe)
    ute.append(ue)
    yte.append(ye)
    vte.append(ve)
    
    xts.append(0)
    yts.append(0)
    
    xtm.append(xm+xe)
    utm.append(um)
    ytm.append(ym+ye)
    vtm.append(vm)
    
    Fx_earth_moon = G*(m_ear*m_mon)*(xm)/math.pow((xm)**2 + (ym)**2, 3/2)
    Fy_earth_moon = G*(m_ear*m_mon)*(ym)/math.pow((xm)**2 + (ym)**2, 3/2)

    Fx_earth_sun = G*(m_ear*m_sun)*xe/math.pow(xe**2 + ye**2, 3/2)
    Fy_earth_sun = G*(m_ear*m_sun)*ye/math.pow(xe**2 + ye**2, 3/2)

    due = (-Fx_earth_sun) / m_ear   # x方向速度变化 注意负号
    dve = (-Fy_earth_sun) / m_ear   # y方向速度变化

    ue=ue+dt*due   # 地球x方向速度 欧拉法数值积分
    ve=ve+dt*dve   

    xe = xe + dt*ue   # 地球x方向的位置 欧拉法数值积分
    ye = ye + dt*ve   
    
    dum = (-Fx_earth_moon) / m_mon   # x方向速度变化
    dvm = (-Fy_earth_moon) / m_mon   

    um = um + dt*dum   # 月球x方向速度 欧拉法数值积分
    vm = vm + dt*dvm   # 月球y方向速度 欧拉法数值积分

    xm = xm + dt*um   # 月球x方向的位置 欧拉法数值积分
    ym = ym + dt*vm   # 月球y方向的位置 欧拉法数值积分
    


plt.plot(xte, yte, label="earth")
plt.plot(xtm, ytm, label="moon")

plt.show()

 3、实验结果

下图为局部放大图:可以看到月球(蓝线)绕着地球(黄线)转 。

4、如何更改数据

改红色的值,然后根据公式算出来黄色的值。红色值在上面改有设置。

这个公式是向心力公式和万有引力公式的联立。

改数技巧:数据不能太离谱,太阳能拽住地球,地球能抓住月球,太阳到地球距离远远大于地月距离

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要绘制轨道模型,我们需要使用Python中的turtle库,以及一些基本的几何知识。以下是一个简单的示例代码: ```python import turtle import math # 设置画布和海龟 canvas = turtle.Screen() canvas.bgcolor("black") t = turtle.Turtle() t.speed(0) t.color("white") t.pensize(2) # 地距离、地球半径和球半径 sun_distance = 300 earth_radius = 50 moon_radius = 20 # 画地轨道 t.penup() t.goto(-sun_distance, 0) t.pendown() t.circle(sun_distance) # 画地球轨道 t.penup() t.goto(0, 0) t.pendown() t.circle(sun_distance-100) # 计算地球球的位置 earth_angle = 0 moon_angle = 0 while True: # 计算当前地球球的位置 earth_x = (sun_distance-100) * math.cos(math.radians(earth_angle)) earth_y = (sun_distance-100) * math.sin(math.radians(earth_angle)) moon_x = earth_x + 100 * math.cos(math.radians(moon_angle)) moon_y = earth_y + 100 * math.sin(math.radians(moon_angle)) # 画地球球 t.penup() t.goto(earth_x, earth_y) t.pendown() t.circle(earth_radius) t.penup() t.goto(moon_x, moon_y) t.pendown() t.circle(moon_radius) # 更新角度 earth_angle += 1 moon_angle += 12 # 等待一段时间后清除画布 if earth_angle % 360 == 0: turtle.clear() # 隐藏海龟 t.hideturtle() # 等待点击关闭窗口 canvas.exitonclick() ``` 这个代码会画出一个地轨道和一个地球轨道,并且会根据时间不断更新地球球的位置。你可以调整`sun_distance`、`earth_radius`和`moon_radius`变量来改变轨道和天体的大小。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值