matelab星体运动轨迹
发布时间:2011-12-08 12:50:45
发布时间:2011-12-08 12:50:45
嫦娥一号与月亮、地球、太阳关系演示图
欧阳仕粮 学号:20084051014
(吉首大学物理与机电工程学院,湖南 吉首 416000)
摘 要:用matlab模拟嫦娥一号人造卫星运围绕月球做周期性运动时,人造卫星、月球、地球相对于太阳的运动轨迹动画。展现了人造卫星绕月飞行时相对与参照物太阳的运动轨迹,便于直观的了解卫星相对于太阳的相对运动。
关键词:卫星运动轨迹;相对运动;数学软件matlab
1、引言
大家都知道我们所了解的地球围绕太阳做近似圆周运动的规则运动,当然月球,人造地球卫星也是如此,而我们一直以来所关注的登月工程的探月卫星也是这样一种情况。那月球、探月卫星嫦娥一号相对于太阳是一个怎样的情形,下面通过计算机软件matlab,来模拟一下月球、嫦娥一号相对太阳的运动动画,并描绘出轨迹。
2、原理
假设我们所研究的所有星体处在同一水平面上。地球距太阳的的平均距离为R,月球距地球的平均距离为r1,嫦娥一号距月球的平均距离为r2,地球公转角速度w1,月亮公转角速度w2,嫦娥一号绕月亮公转角速度w3。我们从0每隔0.01到2取一个弧度s1。地球相对太阳转过的角度sita1,月亮相对地球转过的角度sita2,嫦娥一号相对月球转过的角度sita3,设开始时间为t=0,然后每隔时间T进行一次取样计算,计算各个星体的的位置坐标。
首先,确定太阳的位置为(0,0),根据圆周运动的轨迹方程确定地球的运行轨道(R*cos(s1),R*sin(s1)),确定月球围绕地球公转的轨道(R*cos(sita1)+r1*cos(s1),R*sin(sita1)+r1*sin(s1)),再确定画嫦娥一号绕月亮公转轨道(R*cos(sita1)+r1*cos(sita1)+r2*cos(s1),R*sin(sita1)+r1*sin(sita1)+r2*sin(s1)),这样就找出了地球、月球、嫦娥一号的轨迹。分别在matlab中用plot函数画出。
通过一个while循环让相对角度sita 不断随着时间变化而变化,如sita1=sita1+w1*T这样来表示逐次增加使相对角度变化w1*T,这样我们的地球公转,月球公转、嫦娥一号公转的轨道的位置就回随着时间变化而变化起来,我们也可以的到月球相对于太阳的为轨迹坐标(R*cos(sita1)+r1*cos(sita2),R*sin(sita1)+r1*sin(sita2)),嫦娥一号相对于太阳的轨迹坐标(R*cos(sita1)+r1*cos(sita2)+r2*cos(sita3),p3y=R*sin(sita1)+r1*sin(sita2)+r2*sin(sita3))。
通过这写轨迹坐标我们就可以演示出星体的运动过程了。
3、源程序
figure('name','嫦娥一号与月亮、地球、太阳关系演示图');%设置标题名字
s1=[0:0.01:2*pi];
hold on;axis equal;%建立坐标系
R=100;%地球到太阳的平均距离
r1=20;%月亮到地球的平均距离
r2=5;%嫦娥一号到月亮的平均距离
w1=1;%设置地球公转角速度
w2=12;%设置月亮公转角速度
w3=96;%设置嫦娥一号绕月亮公转角速度
t=0;%初始时刻为0
T=0.0004;%设置暂停时间
sita1=0;sita2=0;sita3=0;%设置开始它们都在水平线上
set(gcf,'doublebuffer','on') %消除抖动
plot(-170,180,'color','r','marker','.','markersize',40);
text(-160,180,'太阳');%对太阳进行标识
plot(-170,160,'color','g','marker','.','markersize',30);
text(-160,160,'地球');%对地球进行标识
p1=plot(-170,140,'color','b','marker','.','markersize',20);
text(-160,140,'月亮');%对月亮进行标识
p1=plot(-170,120,'color','y','marker','.','markersize',8);
text(-160,120,'嫦娥一号');%对嫦娥一号进行标识
plot(0,0,'color','r','marker','.','markersize',60);%画太阳
plot(R*cos(s1),R*sin(s1),'color','m');%画地球转轨道
l1=plot(R*cos(sita1)+r1*cos(s1),R*sin(sita1)+r1*sin(s1));%画月亮绕地球公转轨道
l2=plot(R*cos(sita1)+r1*cos(sita1)+r2*cos(s1),R*sin(sita1)+r1*sin(sita1)+r2*sin(s1));%画嫦娥一号绕月亮公转轨道
set(gca,'xlim',[-200 200],'ylim',[-200 200]);
p1=plot(R*cos(sita1),R*sin(sita1),'color','g','marker','.','markersize',30);%画地球初始位置
p2=plot(R*cos(sita1)+r1*cos(sita2),R*sin(sita1)+r1*sin(sita2),'color','b','marker','.','markersize',20);%画月球初始位置
p3=plot(R*cos(sita1)+r1*cos(sita2)+r2*cos(sita3),R*sin(sita1)+r1*sin(sita2)+r2*sin(sita3),'color','y','marker','.','markersize',5);%画嫦娥一号初始位置
p2x=R*cos(sita1)+r1*cos(sita2);p2y=R*sin(sita1)+r1*sin(sita2);
p3x=R*cos(sita1)+r1*cos(sita2)+r2*cos(sita3);p3y=R*sin(sita1)+r1*sin(sita2)+r2*sin(sita3);
orbit=line('xdata',p2x,'ydata',p2y,'color','k');%画月球的运动轨迹
orbit1=line('xdata',p3x,'ydata',p3y,'color','r');%画嫦娥一号的运动轨迹
while 1
set(p1,'xdata',R*cos(sita1),'ydata',R*sin(sita1));%设置地球的运动过程
set(l1,'xdata',R*cos(sita1)+r1*cos(s1),'ydata',R*sin(sita1)+r1*sin(s1));%设置月球绕地球的公转轨道的运动过程
ptempx=R*cos(sita1)+r1*cos(sita2);ptempy=R*sin(sita1)+r1*sin(sita2);
set(p2,'xdata',ptempx,'ydata',ptempy);%设置月球的运动过程
set(l2,'xdata',R*cos(sita1)+r1*cos(sita2)+r2*cos(s1),'ydata',R*sin(sita1)+r1*sin(sita2)+r2*sin(s1));%设置嫦娥一号绕月球的公转轨道的运动过程
ptempx1=R*cos(sita1)+r1*cos(sita2)+r2*cos(sita3);ptempy1=R*sin(sita1)+r1*sin(sita2)+r2*sin(sita3);
set(p3,'xdata',ptempx1,'ydata',ptempy1);%设置嫦娥一号的运动过程
p2x=[p2x ptempx];p2y=[p2y ptempy];
p3x=[p3x ptempx1];p3y=[p3y ptempy1];
set(orbit,'xdata',p2x,'ydata',p2y);%设置嫦娥一号的显示过程
set(orbit1,'xdata',p3x,'ydata',p3y);%设置嫦娥一号的显示过程
sita1=sita1+w1*T;%地球相对太阳转过的角度
sita2=sita2+w2*T;%月亮相对地球转过的角度
sita3=sita3+w3*T;%嫦娥一号相对月球转过的角度
pause(T); %暂停一会
drawnow
end
4、演示效果
其中红色曲线代表嫦娥一号轨迹,黑色曲线代表月球轨迹
局部放大图:
其中红色曲线代表嫦娥一号轨迹,黑色曲线代表月球轨迹