- %by dynamic
- %see also http://www.matlabsky.com
- %2008.12.6
- %
- 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',...
- '太阳|地球|月亮|卫星,绕转演示动画——Matlabsky');
- %设置擦除方式
- 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,'——更多精彩参见http://www.matlabsky.com');
- 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
复制代码
|