Matlab-太阳系动画

博客分类: code

Matlab-太阳系动画

Evernote Export

animition of solar system

利用matlab生成太阳系运动的动画

code

clc,clear,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;
r3=10;Lmin3=3;Lmax3=5;T3=30;w3=pi/T3;q3=0;

hh=figure('numbertitle','off','name','Solar System by Joe 
zhouman','Color',[1 1 1]);
sun=line(0,0,'color','r','marker','.','markersize',r0);
earth=line(x0,y0,'color','k','marker','.','markersize',r1);
moon=line(x1,y1,'color','m','marker','.','markersize',r2);
satellite=line(x2,y2,'color','g','marker','.','markersize',r3);

axis off
title({'Solar System','Sun--Earth--Moon--Satellite','by Joe,zhouman'}...
,'fontname','Segoe 
Script','FontSize',12,'FontWeight','normal','Color','black');

text(-50,50,'sun');
line(-55,50,'color','r','marker','.','markersize',r0);
text(-50,40,'earth');
line(-55,40,'color','k','marker','.','markersize',r1);
text(-50,30,'moon');
line(-55,30,'color','m','marker','.','markersize',r2);
text(-50,20,'satellite');
line(-55,20,'color','g','marker','.','markersize',r3);

text(33,50,'the orbit of the moon');
line([27.5 32.5],[50 50],'linestyle','-.','color','r','markersize',8);
text(33,40,'the orbit of the satellite');
line([27.5 32.5],[40 40],'linestyle','--','color','b','markersize',4);
text(33,30,'the orbit of the earth');
line([27.5 32.5],[30 30],'linestyle',':');

s1=0:.01:2*pi;
line(Lmax1*cos(s1),Lmin1*sin(s1),'linestyle',':');

x0=Lmax0*cos(q0);y0=Lmin0*sin(q0);
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);

mlx=x2;mly=y2;
slx=x3;sly=y3;

moonline=line('xdata',mlx,'ydata',mly,'linestyle','-.','color','r','markersize',8);
satelliteline=line('xdata',slx,'ydata',sly,'linestyle','--','color','b','markersize',4);

axis([-60,60,-60,60]);

t=0;
TERM=4500;

for idx=1:TERM
    if not(ishandle(hh))
        return
    end

    q0=t*w0;q1=t*w1;q2=t*w2;q3=t*w3;t=t+1;

    if t>=4500
        t=0;
    end

    x0=Lmax0*cos(q0);y0=Lmin0*sin(q0);
    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);

    mlx=[mlx x2];mly=[mly y2];
    slx=[slx x3];sly=[sly,y3];

    set(sun,'xdata',x0,'ydata',y0);
    set(earth,'xdata',x1,'ydata',y1);
    set(moon,'xdata',x2,'ydata',y2);
    set(satellite,'xdata',x3,'ydata',y3);
    set(moonline,'xdata',mlx,'ydata',mly);
    set(satelliteline,'xdata',slx,'ydata',sly);

    drawnow

    frame=getframe(hh);
    im{idx}=frame2im(frame); 

end

filename = 'solar_system_by_joe_zhouman.gif';

for idx=1:TERM

    [A,map]=rgb2ind(im{idx},256);
    
    if idx == 1
        imwrite(A,map,filename,'gif','LoopCount',0,'DelayTime',0.01);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.01);
    end

end

output file gif

%5Btoc%5D%0A%23%20%20animition%20of%20solar%20system%0A%E5%88%A9%E7%94%A8matlab%E7%94%9F%E6%88%90%E5%A4%AA%E9%98%B3%E7%B3%BB%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%0A%0A%23%23%20code%0A%60%60%60matlab%0Aclc%2Cclear%2Cclose%20all%0Ax0%3D0%3By0%3D0%3Br0%3D80%3BLmin0%3D0%3BLmax0%3D0%3BT0%3D2160%3Bw0%3D0*pi%2FT0%3Bq0%3D0%3B%0Ax1%3D0%3By1%3D0%3Br1%3D40%3BLmin1%3D25%3BLmax1%3D30%3BT1%3D1080%3Bw1%3Dpi%2FT1%3Bq1%3D0%3B%0Ax2%3D0%3By2%3D0%3Br2%3D20%3BLmin2%3D8%3BLmax2%3D10%3BT2%3D180%3Bw2%3Dpi%2FT2%3Bq2%3D0%3B%0Ar3%3D10%3BLmin3%3D3%3BLmax3%3D5%3BT3%3D30%3Bw3%3Dpi%2FT3%3Bq3%3D0%3B%0A%0Ahh%3Dfigure('numbertitle'%2C'off'%2C'name'%2C'Solar%20System%20by%20Joe%20%0Azhouman'%2C'Color'%2C%5B1%201%201%5D)%3B%0Asun%3Dline(0%2C0%2C'color'%2C'r'%2C'marker'%2C'.'%2C'markersize'%2Cr0)%3B%0Aearth%3Dline(x0%2Cy0%2C'color'%2C'k'%2C'marker'%2C'.'%2C'markersize'%2Cr1)%3B%0Amoon%3Dline(x1%2Cy1%2C'color'%2C'm'%2C'marker'%2C'.'%2C'markersize'%2Cr2)%3B%0Asatellite%3Dline(x2%2Cy2%2C'color'%2C'g'%2C'marker'%2C'.'%2C'markersize'%2Cr3)%3B%0A%0Aaxis%20off%0Atitle(%7B'Solar%20System'%2C'Sun--Earth--Moon--Satellite'%2C'by%20Joe%2Czhouman'%7D...%0A%2C'fontname'%2C'Segoe%20%0AScript'%2C'FontSize'%2C12%2C'FontWeight'%2C'normal'%2C'Color'%2C'black')%3B%0A%0Atext(-50%2C50%2C'sun')%3B%0Aline(-55%2C50%2C'color'%2C'r'%2C'marker'%2C'.'%2C'markersize'%2Cr0)%3B%0Atext(-50%2C40%2C'earth')%3B%0Aline(-55%2C40%2C'color'%2C'k'%2C'marker'%2C'.'%2C'markersize'%2Cr1)%3B%0Atext(-50%2C30%2C'moon')%3B%0Aline(-55%2C30%2C'color'%2C'm'%2C'marker'%2C'.'%2C'markersize'%2Cr2)%3B%0Atext(-50%2C20%2C'satellite')%3B%0Aline(-55%2C20%2C'color'%2C'g'%2C'marker'%2C'.'%2C'markersize'%2Cr3)%3B%0A%0Atext(33%2C50%2C'the%20orbit%20of%20the%20moon')%3B%0Aline(%5B27.5%2032.5%5D%2C%5B50%2050%5D%2C'linestyle'%2C'-.'%2C'color'%2C'r'%2C'markersize'%2C8)%3B%0Atext(33%2C40%2C'the%20orbit%20of%20the%20satellite')%3B%0Aline(%5B27.5%2032.5%5D%2C%5B40%2040%5D%2C'linestyle'%2C'--'%2C'color'%2C'b'%2C'markersize'%2C4)%3B%0Atext(33%2C30%2C'the%20orbit%20of%20the%20earth')%3B%0Aline(%5B27.5%2032.5%5D%2C%5B30%2030%5D%2C'linestyle'%2C'%3A')%3B%0A%0As1%3D0%3A.01%3A2*pi%3B%0Aline(Lmax1*cos(s1)%2CLmin1*sin(s1)%2C'linestyle'%2C'%3A')%3B%0A%0Ax0%3DLmax0*cos(q0)%3By0%3DLmin0*sin(q0)%3B%0Ax1%3Dx0%2BLmax1*cos(q1)%3By1%3Dy0%2BLmin1*sin(q1)%3B%0Ax2%3Dx1%2BLmax2*cos(q2)%3By2%3Dy1%2BLmin2*sin(q2)%3B%0Ax3%3Dx2%2BLmax3*cos(q3)%3By3%3Dy2%2BLmin3*sin(q3)%3B%0A%0Amlx%3Dx2%3Bmly%3Dy2%3B%0Aslx%3Dx3%3Bsly%3Dy3%3B%0A%0Amoonline%3Dline('xdata'%2Cmlx%2C'ydata'%2Cmly%2C'linestyle'%2C'-.'%2C'color'%2C'r'%2C'markersize'%2C8)%3B%0Asatelliteline%3Dline('xdata'%2Cslx%2C'ydata'%2Csly%2C'linestyle'%2C'--'%2C'color'%2C'b'%2C'markersize'%2C4)%3B%0A%0Aaxis(%5B-60%2C60%2C-60%2C60%5D)%3B%0A%0At%3D0%3B%0ATERM%3D4500%3B%0A%0Afor%20idx%3D1%3ATERM%0A%20%20%20%20if%20not(ishandle(hh))%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20end%0A%0A%20%20%20%20q0%3Dt*w0%3Bq1%3Dt*w1%3Bq2%3Dt*w2%3Bq3%3Dt*w3%3Bt%3Dt%2B1%3B%0A%0A%20%20%20%20if%20t%3E%3D4500%0A%20%20%20%20%20%20%20%20t%3D0%3B%0A%20%20%20%20end%0A%0A%20%20%20%20x0%3DLmax0*cos(q0)%3By0%3DLmin0*sin(q0)%3B%0A%20%20%20%20x1%3Dx0%2BLmax1*cos(q1)%3By1%3Dy0%2BLmin1*sin(q1)%3B%0A%20%20%20%20x2%3Dx1%2BLmax2*cos(q2)%3By2%3Dy1%2BLmin2*sin(q2)%3B%0A%20%20%20%20x3%3Dx2%2BLmax3*cos(q3)%3By3%3Dy2%2BLmin3*sin(q3)%3B%0A%0A%20%20%20%20mlx%3D%5Bmlx%20x2%5D%3Bmly%3D%5Bmly%20y2%5D%3B%0A%20%20%20%20slx%3D%5Bslx%20x3%5D%3Bsly%3D%5Bsly%2Cy3%5D%3B%0A%0A%20%20%20%20set(sun%2C'xdata'%2Cx0%2C'ydata'%2Cy0)%3B%0A%20%20%20%20set(earth%2C'xdata'%2Cx1%2C'ydata'%2Cy1)%3B%0A%20%20%20%20set(moon%2C'xdata'%2Cx2%2C'ydata'%2Cy2)%3B%0A%20%20%20%20set(satellite%2C'xdata'%2Cx3%2C'ydata'%2Cy3)%3B%0A%20%20%20%20set(moonline%2C'xdata'%2Cmlx%2C'ydata'%2Cmly)%3B%0A%20%20%20%20set(satelliteline%2C'xdata'%2Cslx%2C'ydata'%2Csly)%3B%0A%0A%20%20%20%20drawnow%0A%0A%20%20%20%20frame%3Dgetframe(hh)%3B%0A%20%20%20%20im%7Bidx%7D%3Dframe2im(frame)%3B%20%0A%0Aend%0A%0Afilename%20%3D%20'solar_system_by_joe_zhouman.gif'%3B%0A%0Afor%20idx%3D1%3ATERM%0A%0A%20%20%20%20%5BA%2Cmap%5D%3Drgb2ind(im%7Bidx%7D%2C256)%3B%0A%20%20%20%20%0A%20%20%20%20if%20idx%20%3D%3D%201%0A%20%20%20%20%20%20%20%20imwrite(A%2Cmap%2Cfilename%2C'gif'%2C'LoopCount'%2C0%2C'DelayTime'%2C0.01)%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20imwrite(A%2Cmap%2Cfilename%2C'gif'%2C'WriteMode'%2C'append'%2C'DelayTime'%2C0.01)%3B%0A%20%20%20%20end%0A%0Aend%0A%60%60%60%0A%23%23%23%23%20output%20file%20gif%0A!%5B010ae4cb2dfbf2082bd7896d82eac368.gif%5D(en-resource%3A%2F%2Fdatabase%2F1795%3A1)%0A