%
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
