修改代码,绘制误差最小对应的弹道轨迹
好的,以下是修改后的代码,如果未找到匹配的角度,则绘制误差最小对应的轨迹:
% 参数设置
T = 300; % 运动时间
Tt = 0.01; % 仿真时间间隔
P = [0,0]; % 初始发射位置
M = 20; % 炮弹质量
C = 0.45; % 空气阻力系数
rou = 1.29; % 空气密度
D = 0.12; % 炮弹直径
S = pi*D^2/4; % 炮弹迎风面积
k = 0.5*C*rou*S/M; % 空气阻力加速度总系数
g = 9.8; % 重力加速度
% 已知落点距离
dist = 1670;
% 初始化变量
foundMatch = false;
lastTraj = [];
minError = inf;
% 遍历发射角度
for angle = 0:0.05:1.1
v0 = 500; % 初始速度为500 m/s
V = v0 * sqrt(2) * [cos(angle*pi/180), sin(angle*pi/180)]; % 计算飞行速度
P = [0,0];
% 存储轨迹点
traj = [];
for t = 0:Tt:T
if P(2) < 0
break;
end
af = -k*[V(1)^2, V(2)^2];
a = af + [0, -g];
V = V + a*Tt;
P = P + V*Tt;
% 存储轨迹点
traj = [traj; P];
end
error = abs(P(1) - dist);
if error < minError
minError = error;
foundMatch = true;
bestTraj = traj;
end
end
% 如果未找到匹配的角度,绘制误差最小所对应的轨迹
if ~foundMatch
traj = bestTraj;
end
% 绘制轨迹
figure;
plot(traj(:,1), traj(:,2), '*');
axis equal; % 设置坐标轴间距相同
title('弹道轨迹');
xlabel('距离/m');
ylabel('高度/m');
% 打印结果
fprintf('最小误差:%d米
', minError);
在修改后的代码中,我们添加了一个 minError 变量来存储最小的误差值,以及一个 bestTraj 变量来存储误差最小对应的轨迹。在遍历发射角度时,如果发现更小的误差,就更新 minError 和 bestTraj。
如果未找到匹配的角度,我们将绘制误差最小所对应的轨迹。
请尝试运行修改后的代码,检查是否可以正确绘制误差最小对应的轨迹。如果您还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/Czg 著作权归作者所有。请勿转载和采集!