Matlab 太阳 地球 月亮 绕转演示动画
代码
%
clear; clc;close all
%定义几组变量.分别代表的含义是:
%相对圆心坐标 半径 最近距离 最远距离 周期 角速度 旋转角度
x0=0; y0=0; r0=80; Lmin0=0; Lmax0=0; T0=2160; w0=0*pi/T0; q0=0;
x1=0; y1=0; r1=40; Lmin1=25; Lmax1=30; T1=1080; w1=pi/T1; q1=0;
x2=0; y2=0; r2=20; Lmin2=8; Lmax2=10; T2=180; w2=pi/T2; q2=0;
x3=0; y3=0; r3=10; Lmin3=3; Lmax3=05; T3=30; w3=pi/T3; q3=0;
%初始化
hh=figure('numbertitle','off','name','太阳|地球|月亮|卫星,绕转演示动画——matlabfan');
%设置擦除方式
sun=line(0 ,0 ,'color','r','linestyle','.','erasemode','xor','markersize',r0); %太阳
earth=line(x0,y0,'color','k','linestyle','.','erasemode','xor','markersize',r1); %地球
moon=line(x1,y1,'color','b','linestyle','.','erasemode','xor','markersize',r2); %月亮
satellite=line(x2,y2,'color','g','linestyle','.','erasemode','norm','markersize',r3); %卫星
%添加标注
axis off
title('太阳|地球|月亮|卫星','fontname','宋体','fontsize',9,'FontWeight','demi','Color','black');
text(-20,50,' ');
text(-50,50,'太阳'); %对太阳进行标识
line(-55,50,'color','r','marker','.','markersize',80);
text(-50,40,'地球'); %对地球进行标识
line(-55,40,'color','k','marker','.','markersize',40);
text(-50,30,'月亮'); %对月亮进行标识
line(-55,30,'color','b','marker','.','markersize',20);
text(-50,20,'卫星'); %对卫星进行标识
line(-55,20,'color','g','marker','.','markersize',10);
%绘制轨道
s1=[0:.01:2*pi];
line(Lmax1*cos(s1),Lmin1*sin(s1),'linestyle',':'); %画地球的轨迹,是个椭圆
axis([-60,60,-60,60]); %调整坐标轴
%开始画图
t =0;
while 1
if ~ishandle(hh),return,end
q0=t*w0; q1=t*w1; q2=t*w2; q3=t*w3; t=t+1; %设置运动规律
if t >= 4320; t = 0; end %到了一个周期就重置
x0 = Lmax0 * cos(q1); y1 = Lmin0 * sin(q1); %设置太阳圆心的坐标(在这个程序里,太阳圆心的坐标是不变的,所以可以省略)
x1 = x0 + Lmax1 * cos(q1); y1 = y0 + Lmin1 * sin(q1); %设置地球圆心的坐标
x2 = x1 + Lmax2 * cos(q2); y2 = y1 + Lmin2 * sin(q2); %设置月亮圆心的坐标
x3 = x2 + Lmax3 * cos(q3); y3 = y2 + Lmin3 * sin(q3); %设置卫星圆心的坐标
set(sun,'xdata',x0,'ydata',y0); %画太阳
set(earth,'xdata',x1,'ydata',y1); %画地球
set(moon,'xdata',x2,'ydata',y2); %画月亮
set(satellite,'xdata',x3,'ydata',y3); %画卫星
line('xdata',x2,'ydata',y2,'color','y'); %设置月亮的轨迹
line('xdata',x3,'ydata',y3,'color','r'); %设置卫星的轨迹
drawnow;
end
效果