三自由度155外弹道仿真Qt-C++

本文档定义了一个名为Ballistic_3Dof的类,用于实现榴弹在三维空间中的弹道仿真,包含了速度、射高、射程等变量的计算,使用了微分方程组、空气密度模型和龙格库塔算法进行仿真计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

155榴弹外弹道仿真实验:

#ifndef BALLISTIC_3DOF_H
#define BALLISTIC_3DOF_H
#include <QVector>
#include <cmath>
#include "us76_stdair.h"

class Ballistic_3Dof
{
public:
    Ballistic_3Dof();

    stdAir air;
    const double PI = 3.1415926;
    const double G0 = 9.7803253359;        // 地球表面重力加速度(m/s2)
    const double rho0 = 1.205;             // 地面大气密度(kg/m3)
    const double T0 = 288.15;              // 地面温度(K)
    const double tatal0 = 289.1;           // 地面虚温(K)
    const double P0 = 0.1e6;               // 地面气压(MPa)
    const double R1 = 287;                 // 空气常数 J/KG/K
    const double k = 1.4;

    double i = 0.85;                       // 榴弹弹形系数
    double G = 6.328e-3;
    double Mass = 45.54;                    // 弹丸重量(kg)
    double D = 0.15494;                      // 弹丸口径(m)
    double C = i*D*D * 1000 / Mass;        // 弹道系数

    std::vector<double> t_s;       // 时间
    std::vector<double> vx_s;      // 速度在x轴上的分量
    std::vector<double> vy_s;	   // 速度在y轴上的分量
    std::vector<double> vz_s;	   // 速度在z轴上的分量
    std::vector<double> y_s;       // 射高
    std::vector<double> x_s;       // 射程
    std::vector<double> z_s;       // 横偏
    std::vector<double> v_s;       // 速度
    std::vector<double> theat_s;   // 弹道倾角

    double wx = 0.0;               // 纵风(m/s)
    double wz = 10.0;               // 横风(m/s)
    double wy = 0.0;
    double v = 864;                // 初速(m/s)
    double theat = 40 * PI / 180;  // 初始弹道倾角(deg)
    double x = 0;                  // 水平距离(m)
    double y = 0;                  // 垂直距离(m)
    double z = 0;                  // 横偏距离(m)
    double P = P0;                 // 压强(MPa)
    double vx = v * cos(theat);    // 速度在x轴上的分量
    double vy = v * sin(theat);	   // 速度在y轴上的分量
    double vz = 0;      		   // 速度在z轴上的分量
    double dt = 0.01;              // 步长(s)
    double ct = 0;                 // 初始时间(s)
    double vr;
    const static int NumbVars = 9;        // 参数变量个数
    // 将参数初始值放入Y数组
    double Y[NumbVars] = { 0,vx,vy,vz,x,y,z,P0,theat };
    // 弧度转角度
    double RadToDeg(double rad);
    // 角度转弧度
    double DegToRad(double deg);
    // 弹道微分方程组函数
    void dery(int n, double dy[], double Y[]);
    // 龙格库塔函数
    void RK4(double rk_step);
    // 虚温随高度变化函数
    double tatal(double y);
    // 空气密度函数
    double rho(double P, double y);
    // 声速
    double Cs(double y);
    // 阻力函数
    double Gvcs(double y, double v, double vr);
    // 相对速度
    double Vr(double vx, double vy, double vz, double wx, double wz);
    // 绝对速度
    double Velocity(double vx, double vy, double vz);
    // 仿真计算程序函数
    void calculateReentry();
    // 输出结果文件
    void outData();
    double int11(double YY[][2],int n,double x);
};

#endif // BALLISTIC_3DOF_H
/*弹丸质心运动微分方程组*/
void Ballistic_3Dof::dery(int n, double dy[], double Y[])
{
    v = Velocity(Y[1], Y[2], Y[3]);
    vr = Vr(Y[1], Y[2], Y[3], wx, wz);
    double H = rho(Y[7], Y[5]) / rho0;
    double G = Gvcs(Y[5], v, vr);

    // 微分方程组
    dy[0] = 1.0;                      //t
    dy[1] = -C * H * G * (Y[1] - wx); //vx
    dy[2] = -C * H * G * Y[2] - G0;   //vy
    dy[3] = -C * H * G * (Y[3] - wz); //vz
    dy[4] = Y[1];                     //x
    dy[5] = Y[2];                     //y
    dy[6] = Y[3];                     //z
    dy[7] = -rho(Y[7], Y[5])*G0*Y[2]; //压强
    dy[8] = -G0 * cos(Y[8]) / v;      //弹道倾角
}

实验结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

相对维度

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值