一、运行结果

二、MATLAB程序 
%太阳及水金地火四行星的运行轨迹模拟 %Author: Lei Zhen %Date: 2019-04-26 %万有引力公式F=GMm/r^2
%物体运动是速度与加速度产生的位置变化 clc clear all close all set(0,'defaultfigurecolor','w'); %T
质量 x坐标 y坐标 z坐标 x速度 y速度 z速度 x加速度 y加速度 z加速度 星球直径 % (合速度,不是分量速度) T=[ 1.9891e30 0 0
0 0 0 0 0 0 0 140e7 %太阳1 3.30e23 56.6720e9 0 0 0 47.88e3 0 0 0 0 4880000 %水星2
4.869e24 108.2065e9 0 0 0 35.02e3 0 0 0 0 12103600 %金星3 5.98e24 149.5791e9 0 0
0 29.79e3 0 0 0 0 12756300 %地球4 6.4219e23 226.9024e9 0 0 0 24.13e3 0 0 0 0
6794000 %火星5 ]; %%%%%%%%%%%%%%%%%%%2000年1月1日12时星球日心经度
天体位置速度转换%%%%%%%%%%%%%%%%%%%%%%% JD=[253.78494444 182.60408333 100.36890633
359.44775000].*pi/180; %2000年1月1日12时天体日心黄经 JL=T(2:5,2); T(2:5,2)=JL.*cos(JD');
T(2:5,3)=JL.*sin(JD'); V=T(2:5,6); T(2:5,5)=V.*-sin(JD'); T(2:5,6)=V.*cos(JD');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
si=size(T); temp=10;%画图快慢以及精度控制,越大越快精度越高 time=365*24*temp*3;%3圈 t=3600/temp;
for k=1:time for i=1:si(1) % day=fix((k/60+12)/24)+rem(k/60+12,24)/24;
fx=0;fy=0;fz=0; for j=1:si(1) if i~=j
r=sqrt((T(i,2)-T(j,2))^2+(T(i,3)-T(j,3))^2+(T(i,4)-T(j,4))^2);%%两星球的直线距离 if
r>T(i,8)/2+T(j,8)/2 x=T(i,2)-T(j,2);%两星球在x方向的距离 y=T(i,3)-T(j,3);%两星球在y方向的距离
z=T(i,4)-T(j,4);%两星球在z方向的距离 f=6.67e-11*T(i,1)*T(j,1)/r^2;%两星球万有引力的大小
fx=fx-x/r*f;%x方向的分力 fy=fy-y/r*f;%y方向的分力 fz=fz-z/r*f;%z方向的分力 else
text(T(i,2),T(i,3),'相撞') axis equal hold on end end end T(i,8)=fx/T(i,1);
%x方向的加速度 T(i,9)=fy/T(i,1); %y方向的加速度 T(i,10)=fz/T(i,1);%z方向的加速度 end for
i=1:si(1) T(i,2)=T(i,2)+T(i,5)*t+0.5*T(i,8)*t^2; %星球的x轴坐标
T(i,3)=T(i,3)+T(i,6)*t+0.5*T(i,9)*t^2;%星球的y轴坐标
T(i,4)=T(i,4)+T(i,7)*t+0.5*T(i,10)*t^2;%星球的z轴坐标 T(i,5)=T(i,5)+T(i,8)*t;
%星球的x轴方向速度 T(i,6)=T(i,6)+T(i,9)*t; %星球的y轴方向速度
T(i,7)=T(i,7)+T(i,10)*t;%星球的z轴方向速度 end if rem(k,24*temp*5)==0 %每5天绘制轨迹,单圈点数控制 %
h_axes=findobj(gcf,'type','axes'); %%获得当前图中所有坐标的句柄 %
h_children_axes=allchild(h_axes); %% 获得坐标的子对象的句柄 % delete(h_children_axes); %%
删除所有坐标子对象句柄,达到清空目的 figure(1),axis equal, axis([-2.5e11,2.5e11,-2.5e11,2.5e11]);
%以太阳为中心绘图,演示行星饶日公转 set(gcf,'position',[250,250,700,700]);
set(gca,'position',[0,0,1,1]);
plot(T(1,2),T(1,3),'or','MarkerFaceColor','r','MarkerSize',20); hold on,
plot(T(2,2),T(2,3),'ok','MarkerFaceColor','k','MarkerSize',5); hold on,
plot(T(3,2),T(3,3),'oy','MarkerFaceColor','y','MarkerSize',5); hold on,
plot(T(4,2),T(4,3),'ob','MarkerFaceColor','b','MarkerSize',5); hold on,
plot(T(5,2),T(5,3),'oc','MarkerFaceColor','c','MarkerSize',5); drawnow end end
 

技术
©2019-2020 Toolsou All rights reserved,
2年前出厂的小天才电话手表无法使用 联通:2G网已关闭vue使用THREE.js创建一个可以控制的立方体 Unity3D Input按键系统人工智能算法总结华为Mate 40 Pro+ 5G曝光:徕卡电影镜头、陶瓷机身Spark SQL-编程明明是post请求为什么会在地址栏显示参数?习题11-5 指定位置输出字符串关于Bellman-Ford算法的个人理解vue 监听 Treeselect 选择项的改变