当时做毕设突发奇想顺手写的。

代码如下

function threebody(Mass1x3,Velocity3x3,Position3x3,Frequency)
%%——————————————————————————————————————————————————————————————————————————————
%% 初始状态
if nargin < 3%速度v1 = [0,0,0];v2 = [0,0,0];v3 = [4000,4000,-4000];%质量m1 = 15*10^24;         %蓝m2 = 10*10^24;         %红m3 = 5*10^24;          %黄%初始点m1_position = [0,10000000,10000000];m2_position = [10000000,0,0];m3_position = [-5000000,0,5000000];tstep = 0.005;
elseif nargin < 4tstep = 0.01;v1 = Velocity3x3(1:3,1);v2 = Velocity3x3(1:3,2);v3 = Velocity3x3(1:3,3);m1 = Mass1x3(1);m2 = Mass1x3(2);m3 = Mass1x3(3);m1_position = Position3x3(1:3,1);m2_position = Position3x3(1:3,2);m3_position = Position3x3(1:3,3);
elsev1 = Velocity3x3(1:3,1);v2 = Velocity3x3(1:3,2);v3 = Velocity3x3(1:3,3);m1 = Mass1x3(1);m2 = Mass1x3(2);m3 = Mass1x3(3);m1_position = Position3x3(1:3,1);m2_position = Position3x3(1:3,2);m3_position = Position3x3(1:3,3);tstep = Frequency;
end
%星球半径
R0 = 30000;
m0 = 2*10^24;
R1 = R0*((m1/m0)^0.33);
R2 = R0*((m2/m0)^0.33);
R3 = R0*((m3/m0)^0.33);
%相撞距离
Rc12 = R1+R2;
Rc23 = R2+R3;
Rc13 = R1+R3;
%引力常数
G = 6.67*10^-11;
%%——————————————————————————————————————————————————————————————————————————————
%% 运动定律
%
j = 0;%绘图循环,此处设置循环开始
%
colordef black
figure
grid on
hold on
axis equal
p1 = plot3(m1_position(1),m1_position(2),m1_position(3),'b:.','markersize',20);
p2 = plot3(m2_position(1),m2_position(2),m2_position(3),'r:.','markersize',20);
p3 = plot3(m3_position(1),m3_position(2),m3_position(3),'y:.','markersize',20);
h1 = animatedline('color','b','MaximumNumPoints',300);
h2 = animatedline('color','r','MaximumNumPoints',300);
h3 = animatedline('color','y','MaximumNumPoints',300);
xlabel('X')
ylabel('Y')
zlabel('Z')
for i = 1:8192000000000000000%计算r12 = normest(m2_position-m1_position);r23 = normest(m3_position-m2_position);r13 = normest(m3_position-m1_position);F12_len = G*m1*m2/(r12^2);F23_len = G*m2*m3/(r23^2);F13_len = G*m1*m3/(r13^2);%F12_dir = (m2_position-m1_position)/normest(m2_position-m1_position);%1指向2F23_dir = (m3_position-m2_position)/normest(m2_position-m3_position);%2指向3F13_dir = (m3_position-m1_position)/normest(m1_position-m3_position);%1指向3%acceleratea1 = ((F12_len)*F12_dir+(F13_len)*F13_dir)/m1;a2 = ((-F12_len)*F12_dir+(F23_len)*F23_dir)/m2;a3 = ((-F23_len)*F23_dir+(-F13_len)*F13_dir)/m3;%vv1 = a1*tstep+v1;v2 = a2*tstep+v2;v3 = a3*tstep+v3;%m1_position = tstep*v1+m1_position;m2_position = tstep*v2+m2_position;    m3_position = tstep*v3+m3_position;%绘图循环j = j+1;while j == 1024j = 0;set(p1,'Xdata',m1_position(1),'Ydata',m1_position(2),'Zdata',m1_position(3));set(p2,'Xdata',m2_position(1),'Ydata',m2_position(2),'Zdata',m2_position(3));set(p3,'Xdata',m3_position(1),'Ydata',m3_position(2),'Zdata',m3_position(3));addpoints(h1,m1_position(1),m1_position(2),m1_position(3));addpoints(h2,m2_position(1),m2_position(2),m2_position(3));addpoints(h3,m3_position(1),m3_position(2),m3_position(3));drawnowend%检查相撞if r12 < Rc12 || r23 < Rc23 || r13 < Rc13breakend
end
string = {'两星相撞'};
title(string);

星球半径那部分是为了方便我看调试效果那样写的,仅供参考
运动计算用了for循环,循环次数819200…0是随便取的,别问我为什么

虽然是很简单的代码,但也请转载标明出处! 谢谢。

用MATLAB模拟三体运动的代码相关推荐

  1. MATLAB 模拟三体运动教程

    MATLAB 模型三体运动Three_body_movement(无行星) clear all close all clc%--------data--------% m1 = rand() * 10 ...

  2. matlab模拟三体运动_如何写出三体的MATLAB程序-理论分析篇

    如何写出三体的MATLAB程序-理论分析篇 写在前面 之所以写这个程序,是因为某天晚上无聊,室友正在学习MATLAB,于是提议写一个三体运动的物理模拟程序来练练手.就此,我也写一份该程序来为室友做一个 ...

  3. matlab模拟三体运动_matlab三体运动

    闲的蛋疼,学学matlab动画,三体运动还是有点问题(提示line没xdate属性,脑瓜也疼了),不多废话上代码 clc;clear;close; figure('name','三体运动'); axi ...

  4. matlab模拟三体运动_三体运动的matlab演示.docx

    三体运动的matlab演示 I** 1MX " % F(Xr 心) 6j6)( Xr X J j "r*-疝出制痒十丘忑忑拓1 )民严皿_辿少 ..g席+*仍才芮融訴 取殖翎为Mj ...

  5. matlab模拟三体运动_MATLAB教学:模拟三体运动

    代码如下 clc;clear; figure('name','三体运动');%设置标题名字 N=3; e=2.63;%电荷 %x=zeros(1,N);y=zeros(1,N);vx=zeros(1, ...

  6. matlab模拟三体运动_如何写出三体的MATLAB程序-代码篇

    如何写出三体的MATLAB程序-代码篇 写在前面 在上文当中我们已经对三个物体之间的受力进行了分析,也说明了在时间 下的加速度.速度和位移的计算方式. 本篇中将根据上一篇的公式来写出对应的代码,并且详 ...

  7. matlab模拟三体运动_从灯泡到超级计算机,如何模拟浩瀚星空?| 赛先生

    天文学家中有这样一群人,他们既不观星,也不刷公式,而是通过模拟来研究浩瀚星空.在星团.星系这样的恒星系统中,往往包含着上百万颗恒星,规模如此惊人的恒星系统该如何处理?本期"赛先生天文&quo ...

  8. matlab模拟三体运动_Matlab模拟三体运动

    m1=1.5e30;%1号星的质量-红 m2=3.01e30;%2号星的质量-蓝 m3=3.5e30;%3号星的质量-绿 h1=animatedline('MaximumNumPoints',2000 ...

  9. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

最新文章

  1. flask项目中无法更改端口号
  2. 东芝再曝财务造假丑闻 日企百年老店怎么了?
  3. 华为2021在美专利数量首次进前五,超越英特尔苹果微软
  4. Opengl-光照-基本光照-光照贴图(现在告别单调的方块弄个箱子)
  5. redis常见关键字
  6. mysql和sql互导_Mysql和SqlServer互相转换
  7. 百度地图同时显示多个路书
  8. JAVA API在线中文文档地址链接
  9. 你好,C++(2)1.3 C++世界版图1.4 如何学好C++
  10. C语言试题六十三之请编写函数fun:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
  11. CoreData 从入门到精通(五)CoreData 和 TableView 结合
  12. 项目管理学习总结(10)——项目经理需要具备8点管理素质
  13. Cas单点登录的服务器端和客户端的配置
  14. 解决Vscode提示bodyparser已被弃用的问题
  15. 字符串匹配之PabinKarp(模式匹配)
  16. Extjs4循序渐进(一)——开始Ext
  17. 天轰穿结束了,结束了浮躁的生活
  18. android模拟器横屏显示,安卓模拟器bluestacks怎么横屏显示
  19. Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
  20. 《STL》— NYOJ STL练习 习题汇总

热门文章

  1. web前端踩坑小妹border-radius
  2. 南大通用GBase8s 常用SQL语句(124)
  3. The job failed. Unable to determine if the owner (SINOOCEANLAND\v-baidd) of job sendmail has server
  4. 重新建立博客的一段话
  5. css为图片添加一层蒙版
  6. 螺纹钢尺寸测量方法及优点
  7. windows命令行指令
  8. 大数据技术概念以及应用领域完全解读
  9. 【测试用例】如何提高测试覆盖率
  10. YOLOV5 模型和代码修改——针对小目标识别(红外小目标)