matlab 导入星系_Matlab动画模拟太阳系行星运动.doc

该博客展示了如何利用Matlab创建一个动画,模拟太阳系中行星围绕太阳的运动。通过设置不同的参数,如长轴、短轴、角速度和轨道倾斜角度,实现了行星的动态轨迹展示。博客还提供了详细的代码实现过程。
摘要由CSDN通过智能技术生成

Matlab动画模拟太阳系行星运动

figure('name','星系演示');%设置标题名字

pausetime=.02;%设置暂停时间

set(gca,'xlim',[-50 50],'ylim',[-50 30],'zlim',[-50 50]);

set(gcf,'doublebuffer','on') %消除抖动

xlabel('x轴'),ylabel('y轴'),zlabel('z轴');

axis equal;

grid on;

view([3 5 2]);

hold on

a=[8.5 12.5 20 30 50 60 80 100 90];b=[8 12 18 26 45 55 70 90 30];

omga=[4 1.25 1 0.5 0.1 0.05 0.25 0.125 1];r=[0.35 0.8 0.8 0.5 3 2.5 1.5 1.5 0.35];%长轴,短轴,角速度,球体半径

c=sqrt(a.^2-b.^2);h=pi/18;h1=pi/10;f=pi/9;g=pi/8;

aby=[h h 0;h1 h 0;h h 0;h h 0;h h 0;h h 0;h g 0;h h h;g 0 g];%每个轨道平面倾斜角度,偏移设置

%colo={'y','m','b','m','r','c','b','b'};

[X,Y,Z]=sphere(40);

surf(5*X,5*Y,5*Z);colormap(autumn) %设置太阳

light ('position',[1 0 2],'style','infinite')

lighting phong

material shiny

t=0:0.01*pi:50*pi;

t';

num=length(a);

for n=1:num

x(:,n)=a(n)*cos(omga(n)*t)+c(n);

y(:,n)=b(n)*sin(omga(n)*t);

z(:,n)=0*t; %计算未经轨道平面角度倾斜的轨道位置

xuanz(:,:)=[1 0 0;0 cos(aby(n,1)) -sin(aby(n,1));0 sin(aby(n,1)) cos(aby(n,1))]*[cos(aby(n,2)) 0 sin(aby(n,2));0 1 0;-sin(aby(n,2)) 0 cos(aby(n,2))]*[cos(aby(n,3)) -sin(aby(n,3)) 0;sin(aby(n,3)) cos(aby(n,3)) 0;0 0 1]; %每个轨道平面倾斜计算

xyz(:,:)=[x(:,n) y(:,n) z(:,n)]*xuanz(:,:);

x(:,n)=xyz(:,1);

y(:,n)=xyz(:,2);

z(:,n)=xyz(:,3); %计算轨道平面倾斜后的轨道位置

p(n)=surf(r(n)*X+x(1,n),r(n)*Y+y(1,n),r(n)*Z+z(1,n));shading interp %画出每个行星

plot3(x(:,n),y(:,n),z(:,n),'-k');%画出所有轨迹线

end

set(p(1),'facecolor','y');

set(p(2),'facecolor','m');set(p(3),'facecolor','b');set(p(4),'facecolor','m');

set(p(5),'facecolor','r');set(p(6),'facecolor','c');set(p(7),'facecolor','b');set(p(8),'facecolor','b');set(p(9),'facecolor','r');%设置所有行星的颜色

for m=1:5000 %旋转计算

for n=1:length(a)

set(p(n),'xdata',r(n)*X+x(m,n),'ydata',r(n)*Y+y(m,n),'zdata',r(n)*Z+z(m,n)); %所有行星的即时位置设置

end

pause(pausetime); %暂停一会

drawnow

end

下面是更加复杂的动画模拟

figure('name','星系演示');%设置标题名字

pausetime=.01;%设置暂停时间

set(gca,'xlim',[-50 50],'ylim',[-50 30],'zlim',[-50 50]);

set(gcf,'doublebuffer','on') %消除抖动

xlabel('x轴'),ylabel('y轴'),zlabel('z轴');

axis equal;

grid on;

vi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值