Matlab仿真炮弹飞行轨迹——探究射弹参数对飞行轨迹的影响

目录

  • 1.分析炮弹受力
  • 2.设定参数并仿真
  • 3.通过仿真寻找最佳射弹速度
    • 3.1.射弹角度的影响
    • 3.2.射弹速率的影响
    • 3.3.炮弹属性和空气的影响
      • 3.3.1.空气阻力系数的影响
      • 3.3.2.炮弹质量的影响

1.分析炮弹受力

假设炮弹在飞行过程中可以看成质点,运动时仅考虑初始速度、重力加速度以及空气阻力的影响。考虑平面是X-Y二维的情况,假设位置、速度、加速度的X和Y方向各自是解耦的。
加速度=重力加速度(矢量)+空气阻力加速度(矢量)
重力加速度不需要多说,为恒定值;空气阻力较为复杂,经过查阅资料可知,空气阻力的方向和物体与空气的相对运动方向相反,大小为f=12Cρν2f=\frac{1}{2}C\rho\nu^2f=21Cρν2其中ν\nuν为物体相对于空气的速度,C为空气阻力系数,由物体的形状决定,ρ\rhoρ为空气密度,一般正常干燥空气为1.29g/L左右。
由于位置由X和Y坐标共同决定,因此也可以将速度和加速度分解为X和Y方向两个矢量,具体的运算关系如下:
{P→=P→+Tt∗V→V→=V→+Tt∗a→a→=af→+ag→\begin{cases} \overrightarrow{P}=\overrightarrow{P}+T_t*\overrightarrow{V}\\ \overrightarrow{V}=\overrightarrow{V}+T_t*\overrightarrow{a}\\ \overrightarrow{a}=\overrightarrow{a_f}+\overrightarrow{a_g} \end{cases}P=P+TtVV=V+Ttaa=af+ag
其中TtT_tTt为仿真间隔,P→、V→,a→\overrightarrow{P}、\overrightarrow{V},\overrightarrow{a}PVa分别为炮弹当前时刻的位移、速度、加速度矢量,af→、ag→\overrightarrow{a_f}、\overrightarrow{a_g}afag分别为空气阻力加速度和重力加速度。

2.设定参数并仿真

T=30;%仿真时间
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
V=[50,50];%炮弹的初始速度
M=2;%炮弹自重
C=0.35;%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
k=0.5*C*rou*S/M;%空气阻力加速度总系数
af=-k*[V(1)^2,V(2)^2];%空气阻力系数
ag=[0,-9.8];%重力加速度
figure;
title('模拟炮弹飞行轨迹');
%xlim([0,600]);ylim([0,140]);
hold on;
for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度pause(0.01);%动画延迟%disp(['已仿真',num2str(i),'s'])
end 

在这里插入图片描述
初始速度为V→=(50,50)\overrightarrow{V}=(50,50)V=(50,50),可以看出由于空气阻力的影响,轨迹的后半段的飞行距离明显不如前半段。通过修改不同的参数:
①初始速度V→\overrightarrow{V}V
②空气阻力系数C
③炮弹直径D
④炮弹质量M
可以粗略地得知四个参数对炮弹飞行轨迹的影响。

3.通过仿真寻找最佳射弹速度

假设炮弹的发射速率固定,那么通过修改发射角度,可以给炮弹的飞行轨迹的诸多指标进行评价。例如飞行距离、飞行时间、飞行轨迹等等。为了方便我们对比各参数,我们对代码稍作修改即可。

3.1.射弹角度的影响

保持射弹速率为50250\sqrt{2}502,控制发射角度,观察炮弹的飞行轨迹,代码如下:

T=30;%仿真时间
Init_angle=[30,45,60];
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
M=2;%炮弹自重
C=0.35;%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
k=0.5*C*rou*S*rou/M;%空气阻力加速度总系数
af=-k*[V(1)^2,V(2)^2];%空气阻力系数
ag=[0,-9.8];%重力加速度
figure;
%xlim([0,600]);ylim([0,140]);
hold on;
for j=1:size(Init_angle,2)V=50*sqrt(2)*[cos(Init_angle(j)*pi/180),sin(Init_angle(j)*pi/180)];%计算初速度P=[0,0];%重置位置subplot(3,1,j);for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度%pause(0.01);%动画延迟%disp(['已仿真',num2str(i),'s'])end title(['射弹角度:',num2str(Init_angle(j)),'° ','飞行时间:',num2str(i),'s','飞行距离:',num2str(P(1))])
end

效果如下:
在这里插入图片描述
可以看出,在目前的空气阻力系数、炮弹直径和质量以及射弹速率条件下,45°出射角可以获得最长的射弹距离,而30°的出射角飞行时间最短,而60°的出射角射弹距离最短,飞行时间最长。为了让我们得出更加精确的结论,我们进一步缩减变量步长——通过修改Init_angle(初始速度矩阵)实现,则可以得到该状态下的最优出射角:
在这里插入图片描述
在这里插入图片描述
因此可以粗略的看出,在此炮弹属性以及射弹速率的条件下,为获得最长射弹距离,45°角显然是最优角。若要获得更短的飞行时间,可以略微减小角度。

3.2.射弹速率的影响

保证射弹角度是一个定值45°,修改射弹速率,仿真代码如下:

T=30;%仿真时间
gain=[1,1.5,2,3];
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
M=2;%炮弹自重
C=0.35;%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
k=0.5*C*rou*S*rou/M;%空气阻力加速度总系数
af=-k*[V(1)^2,V(2)^2];%空气阻力系数
ag=[0,-9.8];%重力加速度
figure;
%xlim([0,600]);ylim([0,140]);
hold on;
for j=1:size(gain,2)V=gain(j)*[50,50];%计算初速度P=[0,0];%重置位置subplot(2,2,j);for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度%pause(0.01);%动画延迟%disp(['已仿真',num2str(i),'s'])end title(['射弹速率:',num2str(gain(j)*50),' ','飞行时间:',num2str(i),'s  ','飞行距离:',num2str(P(1))])
end

飞行轨迹图如下:
在这里插入图片描述
从飞行轨迹上可以看出,随着射弹速率的提高,飞行距离显著提高,但是射弹轨迹的对称性下降,说明空气阻力对飞行轨迹的影响逐渐加强。此时的45°角不再是最优出射角,可以就射弹速率为150的情况进行研究分析,代码如下:

T=30;%仿真时间
Init_angle=[35,40,45];
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
M=2;%炮弹自重
C=0.35;%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
k=0.5*C*rou*S*rou/M;%空气阻力加速度总系数
af=-k*[V(1)^2,V(2)^2];%空气阻力系数
ag=[0,-9.8];%重力加速度
figure;
%xlim([0,600]);ylim([0,140]);
hold on;
for j=1:size(Init_angle,2)V=150*[cos(Init_angle(j)*pi/180),sin(Init_angle(j)*pi/180)];%计算初速度P=[0,0];%重置位置subplot(3,1,j);for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度%pause(0.01);%动画延迟%disp(['已仿真',num2str(i),'s'])end title(['射弹角度:',num2str(Init_angle(j)),'° ','飞行时间:',num2str(i),'s','飞行距离:',num2str(P(1))])
end

在这里插入图片描述
通过对比可知,45°不再是最佳出射角,35°~45°范围内射弹距离变化不是很大,但是减小出射角度可以大大地缩短飞行时间。

3.3.炮弹属性和空气的影响

假设忽略空气阻力的影响,通过物理学的知识很容易可以计算出出射角为45°时总能获得最大的射弹距离。但如果空气阻力不可忽略,通过上文的探讨可以发现,随着空气阻力因素逐渐增强(射弹速率的增加),略微减小射弹角度有利于获得更长的射弹距离和更短的飞行时间,下面我们就通过其他几个因素调节空气阻力对炮弹的影响来印证此定律。(炮弹直径、炮弹质量、炮弹的空气阻力系数、空气密度)

3.3.1.空气阻力系数的影响

将空气阻力系数C设为一个参数矩阵,将其作为外层循环,出射角作为内层循环,对比不同空气阻力系数下三种出射角的飞行轨迹。

close all
clear
T=30;%仿真时间
Init_angle=[35,40,45];
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
M=2;%炮弹自重
C=[0.25,0.35,0.5];%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
ag=[0,-9.8];%重力加速度
figure;hold on;
for N=1:size(C,2)k=0.5*C(N)*rou*S*rou/M;%空气阻力加速度总系数for j=1:size(Init_angle,2)V=50*sqrt(2)*[cos(Init_angle(j)*pi/180),sin(Init_angle(j)*pi/180)];%计算初速度af=-k*[V(1)^2,V(2)^2];%空气阻力初始加速度P=[0,0];%重置位置subplot(3,3,(N-1)*size(Init_angle,2)+j)for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度%pause(0.01);%动画延迟%disp(['已仿真',num2str(i),'s'])end title({['空气阻力系数:',num2str(C(N)),...' 射弹角度:',num2str(Init_angle(j)),'°'];...['飞行时间:',num2str(i),'s ',...'飞行距离:',num2str(P(1))]})end
end

效果如下:
在这里插入图片描述
可以看出,随着炮弹的空气阻力系数加大,空气阻力的影响逐渐显著,35°~45°之间的射弹距离变化逐渐减小,但是飞行略微减小角度却可以获得更短的飞行时间,最佳的出射角逐渐趋向于40°。总体来说,较大的空气阻力系数应该略微减小出射角,反之,应该略微增大出射角使之更接近于45°。
从空气阻力的计算表达式f=0.5Cρν2f=0.5C\rho\nu^2f=0.5Cρν2可以看出,空气密度增大以及初速度增大对于出射角的影响应该类似。我们也可以大体上作出推断,由于af=f/Ma_f=f/Maf=f/M,在保持其他变量不变的情况下炮弹的质量越大,空气阻力影响越小,最佳出射角越接近于45°。

3.3.2.炮弹质量的影响

按照同样的方法,将质量设为一个参数矩阵作为外循环,角度矩阵作为内循环进行仿真,代码如下:

close all
clear
T=30;%仿真时间
Init_angle=[35,40,45];
Tt=0.05;%仿真间隔
P=[0,0];%炮弹的初始点坐标[X,Y]
M=[2,3,4];%炮弹自重
C=0.35;%空气阻力系数
rou=1.29;%空气密度
D=0.06;%炮弹直径
S=pi*D^2/4;%炮弹迎风面积
ag=[0,-9.8];%重力加速度
figure;hold on;
for N=1:size(M,2)k=0.5*C*rou*S*rou/M(N);%空气阻力加速度总系数for j=1:size(Init_angle,2)V=50*sqrt(2)*[cos(Init_angle(j)*pi/180),sin(Init_angle(j)*pi/180)];%计算初速度af=-k*[V(1)^2,V(2)^2];%空气阻力初始加速度P=[0,0];%重置位置subplot(3,3,(N-1)*size(Init_angle,2)+j)for i=0:Tt:Tif P(2)<0,disp('到达地面,已仿真结束!'),disp([num2str(i),'s']),break,endplot(P(1),P(2),'.');hold on;a=af+ag;%计算总的加速度V=V+a*Tt;%计算当前速度P=P+V*Tt;%计算当前位置af=-k*[V(1)^2,V(2)^2];%当前空气阻力加速度end title({['炮弹质量:',num2str(M(N)),...' 射弹角度:',num2str(Init_angle(j)),'°'];...['飞行时间:',num2str(i),'s ',...'飞行距离:',num2str(P(1))]})end
end

效果如下:
在这里插入图片描述
可以看出,这个和我们的预估是一样的。
综上所述,决定最佳出射角的综合因子是
af0=Cρν022Ma_{f_0}=\frac{C\rho{\nu_0}^2}{2M}af0=2MCρν02
该因子越大,最佳出射角在45°基础上减小的角度越大,该因子越小,最佳出射角越接近于45°。
希望本文对您有帮助,谢谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50行代码,搞定敏感数据读写!

每天早上七点三十&#xff0c;准时推送干货一、介绍在实际的软件系统开发过程中&#xff0c;由于业务的需求&#xff0c;在代码层面实现数据的脱敏还是远远不够的&#xff0c;往往还需要在数据库层面针对某些关键性的敏感信息&#xff0c;例如&#xff1a;身份证号、银行卡号、…

【Python】导入资源管理器的文件列表(计算文件和文件夹大小)

文章目录1.按照扩展名进行分类2.导出文件的大小3.计算文件夹大小4.分类到字典5.完整代码及效果1.按照扩展名进行分类 使用Python查询一个路径下的所有文件可以借助glob模块以及os模块。 在导入文件列表之前&#xff0c;我们需要指定我们的操作目录&#xff0c;操作目录一经指定…

HashMap 中的一个“坑”!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;最近公司新来了一个小伙伴&#xff0c;问了磊哥一个比较“奇怪”的问题&#xff0c;这个问题本身的难度并不大&#xff0c;但…

【Python】交互式界面创建函数

文章目录简介规则思路示例代码与运行效果简介 运行Python时&#xff0c;在程序运行过程中手动输入一个函数表达式&#xff0c;并将其作为一个函数进行后续的调用工作&#xff0c;类似于Matlab里面的匿名函数。这个功能使用传统语言会相当麻烦&#xff0c;当然&#xff0c;我也…

原生 js前端路由系统实现3之代码 构建工具 和 querystring功能

为什么80%的码农都做不了架构师&#xff1f;>>> 构建 目前前端构建工具流行的是 grunk.js 功能是大而全&#xff0c;但往往大而全的东西为了多样性 需要做额外的配置 我还是想要有一个专门为自己特性项目而生构建工具 我不想加载第三方的node模块&#xff0c;也不…

单例模式,真不简单

前言单例模式无论在我们面试&#xff0c;还是日常工作中&#xff0c;都会面对的问题。但很多单例模式的细节&#xff0c;值得我们深入探索一下。这篇文章透过单例模式&#xff0c;串联了多方面基础知识&#xff0c;非常值得一读。1 什么是单例模式&#xff1f;单例模式是一种非…

【python】最优化方法之一维搜索(黄金分割法+斐波那契法)

文章目录1.概念2.遍历搜索3.优化算法3.1.一维搜索原则3.2.黄金分割法Code Block3.3.斐波拉契法Code Block1.概念 \qquad一维搜索是最优化方法最简单的一种&#xff0c;即求一个在(a,b)内&#xff0c;连续下单峰函数f(x)f(x)f(x)的极小值。所谓下单峰函数就是只有一个极小值的函…

MySQL系列之E-1------MySQL主从复制原理

主从复制是异步复制,可以通过google的一个插件实现半同步E.1 主从复制原理1、建立主从复制的用户名和密码2、将master上主库需要进行复制的库“锁库”3、通过mysqldump备份master上主库&#xff0c;“解锁“&#xff0c;在slave端进行恢复4、更改配置文件5、在丛库上执行change…

工作中常用的 6 种设计模式!

前言 哈喽&#xff0c;大家好。平时我们写代码呢&#xff0c;多数情况都是流水线式写代码&#xff0c;基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢&#xff0c;我觉得&#xff0c;最好的方式就是&#xff1a;使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中…

【Matlab/C/Python/VB/...】代码复制到word时如何变成彩色的

文章目录下载Notepad复制代码在Notepad粘贴在word中粘贴下载Notepad Notepad是一款免费的Windows软件&#xff0c;一般Windows10和Windows7系统都已经自带&#xff0c;也可以在应用商店直接搜索下载 「win10系统兼容的是7.8版本」 复制代码 在语言编辑乱码复制代码&#xff…

hadoop 2.5.0安装和配置

安装hadoop要先做以下准备&#xff1a; 1.jdk&#xff0c;安装教程在 http://www.cnblogs.com/stardjyeah/p/4640917.html 2.ssh无密码验证&#xff0c;配置教程在 http://www.cnblogs.com/stardjyeah/p/4641524.html 3.linux静态ip配置&#xff0c;教程在 http://www.cnblo…

基于双线性插值的图像旋转原理及MATLAB实现(非自带函数)

目录1.图像旋转的原理1.1.旋转矩阵1.2.双线性插值1.3.像素点匹配2.实现效果与说明1.图像旋转的原理 1.1.旋转矩阵 旋转一幅图像&#xff08;假设这幅图像大小是矩形的&#xff09;&#xff0c;当然应该从像素点&#xff08;pixels&#xff09;开始&#xff0c;在直角坐标系中…

漫画:给女朋友介绍什么是 “元宇宙” ?

什么是更高的自由度呢&#xff1f;或许有人觉得&#xff0c;我们在网络游戏当中&#xff0c;不是也很自由吗&#xff1f;想怎么玩就怎么玩。但是&#xff0c;无论一款网络游戏的元素有多么丰富&#xff0c;游戏当中的角色、任务、职业、道具、场景&#xff0c;都是游戏设计师预…

MyBatis 中为什么不建议使用 where 1=1?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;最近接手了一个老项目&#xff0c;“愉悦的心情”自然无以言表&#xff0c;做开发的朋友都懂&#xff0c;这里就不多说了&am…

【openMV与机器视觉】四旋翼飞行控制背景下的PID控制与摄像头算法简介

文章目录声明1.四旋翼飞行控制简介2.飞行控制算法2.1.接收机PWM生成2.2.PID算法位置PID速度PID3.摄像头算法3.1.图像处理3.2.霍夫曼变换3.3.巡线算法3.3.寻找目标点降落算法声明 \qquad本文的算法在openMV IDE例程的基础上进行原创&#xff0c;在比赛结束后予以发表&#xff1b…

聊聊sql优化的15个小技巧

前言sql优化是一个大家都比较关注的热门话题&#xff0c;无论你在面试&#xff0c;还是工作中&#xff0c;都很有可能会遇到。如果某天你负责的某个线上接口&#xff0c;出现了性能问题&#xff0c;需要做优化。那么你首先想到的很有可能是优化sql语句&#xff0c;因为它的改造…

【MATLAB】Parzen窗与K近邻算法原理与代码详解

文章目录1.非参数估计原理2.Parzen窗2.1.算法原理2.2.Matlab实现与参数探究3.K近邻3.1.算法原理3.2.Matlab实现与参数探究1.非参数估计原理 \qquad已知一个样本的概率分布时&#xff0c;我们只需要对概率分布中的参数进行估计即可得到该样本的概率密度函数。例如已知样本X服从正…

使用 Lambda 表达式实现超强的排序功能

我们在系统开发过程中&#xff0c;对数据排序是很常见的场景。一般来说&#xff0c;我们可以采用两种方式&#xff1a;借助存储系统&#xff08;SQL、NoSQL、NewSQL 都支持&#xff09;的排序功能&#xff0c;查询的结果即是排好序的结果查询结果为无序数据&#xff0c;在内存中…

【mongodb系统学习之四】查看mongodb进程

四、查看mongodb进程&#xff08;可以配合启动和关闭使用&#xff09;&#xff1a; 1&#xff09;、方法一&#xff1a;直接查看mongodb进程是否已经存在&#xff08;用上面的方式启动后&#xff0c;需要另开一个窗口操作&#xff09;&#xff1a;ps –ef|grep mongodb, 如图&a…

【Simulink】粒子群算法(PSO)整定PID参数(附代码和讲解)

目录0.背景1.粒子群算法1.1.算法简介1.2.算法步骤1.3.算法举例2.PID自整定2.1.基于M文件编写的PID参数自整定*2.2.复杂系统的PID自整定&#xff08;基于simulink仿真&#xff09;2.2.1.PSO优化PID的过程详解2.2.2.在PSO优化过程中修改参数价值权重阅读前必看&#xff1a;本代码…