数学建模社区-数学中国

标题: 【MATLAB动画教程十一】 [打印本页]

作者: 士心之约    时间: 2015-9-23 09:39
标题: 【MATLAB动画教程十一】
  1. %by dynamic
  2. %see also http://www.matlabsky.com
  3. %2008.12.6
  4. %
  5. clear; clc;close all
  6. %定义几组变量.分别代表的含义是:
  7. %相对圆心坐标半径 最近距离 最远距离 周期 角速度 旋转角度
  8. x0=0; y0=0; r0=80; Lmin0=0; Lmax0=0; T0=2160; w0=0*pi/T0; q0=0;
  9. x1=0; y1=0; r1=40; Lmin1=25; Lmax1=30; T1=1080; w1=pi/T1; q1=0;
  10. x2=0; y2=0; r2=20; Lmin2=8; Lmax2=10; T2=180; w2=pi/T2; q2=0;
  11. x3=0; y3=0; r3=10; Lmin3=3; Lmax3=05; T3=30; w3=pi/T3; q3=0;
  12. %初始化
  13. hh=figure('numbertitle','off','name',...
  14. '太阳|地球|月亮|卫星,绕转演示动画——Matlabsky');
  15. %设置擦除方式
  16. sun=line(0 ,0 ,'color','r','linestyle','.','erasemode',...
  17. 'xor','markersize',r0); %太阳
  18. earth=line(x0,y0,'color','k','linestyle','.','erasemode',...
  19. 'xor','markersize',r1); %地球
  20. moon=line(x1,y1,'color','b','linestyle','.','erasemode','xor',...
  21. 'markersize',r2); %月亮
  22. satellite=line(x2,y2,'color','g','linestyle','.','erasemode',...
  23. 'norm','markersize',r3); %卫星
  24. %添加标注
  25. axis off
  26. title('太阳|地球|月亮|卫星',...
  27. 'fontname','宋体','fontsize',9,'FontWeight','demi','Color','black');
  28. text(-20,50,'——更多精彩参见http://www.matlabsky.com');
  29. text(-50,50,'太阳'); %对太阳进行标识
  30. line(-55,50,'color','r','marker','.','markersize',80);
  31. text(-50,40,'地球'); %对地球进行标识
  32. line(-55,40,'color','k','marker','.','markersize',40);
  33. text(-50,30,'月亮'); %对月亮进行标识
  34. line(-55,30,'color','b','marker','.','markersize',20);
  35. text(-50,20,'卫星'); %对卫星进行标识
  36. line(-55,20,'color','g','marker','.','markersize',10);
  37. %绘制轨道
  38. s1=[0:.01:2*pi];
  39. line(Lmax1*cos(s1),Lmin1*sin(s1),'linestyle',':'); %画地球的轨迹,是个椭圆
  40. axis([-60,60,-60,60]); %调整坐标轴
  41. %开始画图
  42. t =0;
  43. while 1
  44. if ~ishandle(hh),return,end
  45. q0=t*w0; q1=t*w1; q2=t*w2; q3=t*w3; t=t+1; %设置运动规律
  46. if t >= 4320; t = 0; end %到了一个周期就重置
  47. %设置太阳圆心的坐标(在这个程序里,太阳圆心的坐标是不变的,所以可以省略)
  48. x0 = Lmax0 * cos(q1); y1 = Lmin0 * sin(q1);
  49. x1 = x0 + Lmax1 * cos(q1); y1 = y0 + Lmin1 * sin(q1); %设置地球圆心的坐标
  50. x2 = x1 + Lmax2 * cos(q2); y2 = y1 + Lmin2 * sin(q2); %设置月亮圆心的坐标
  51. x3 = x2 + Lmax3 * cos(q3); y3 = y2 + Lmin3 * sin(q3); %设置卫星圆心的坐标
  52. set(sun,'xdata',x0,'ydata',y0); %画太阳
  53. set(earth,'xdata',x1,'ydata',y1); %画地球
  54. set(moon,'xdata',x2,'ydata',y2); %画月亮
  55. set(satellite,'xdata',x3,'ydata',y3); %画卫星
  56. line('xdata',x2,'ydata',y2,'color','y'); %设置月亮的轨迹
  57. line('xdata',x3,'ydata',y3,'color','r'); %设置卫星的轨迹
  58. drawnow;
  59. end
复制代码






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5