天天看点

python模拟行星运动_Matlab动画模拟太阳系行星运动

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   %

画出每个行星