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
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))
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 %
画出每个行星