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

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;      //弹道倾角
}

实验结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
通用弹道仿真计算程序C源代码是一种计算机程序,用于模拟弹道飞行情况。它可以根据给定的输入参数和初始条件,计算出弹丸飞行的轨迹、速度和其他相关参数。 这个程序的核心是弹道仿真算法,它根据物理学原理和数学模型,通过迭代计算来预测弹丸的轨迹。程序首先会初始化弹丸的质量、速度、发射角度和初始位置等参数。然后根据给定的时间步长,利用欧拉法或其他数值积分方法,计算弹丸在每个时间步的速度和位置。 在计算过程中,程序会考虑空气阻力、重力和其他可能影响弹丸飞行的因素。它会根据当前的速度和位置,计算出弹丸所受到的阻力和重力的大小和方向,并更新弹丸的速度和位置。 程序会根据设定的终止条件来判断计算是否终止。一般来说,可以设置飞行的最大时间或者最大高度来终止计算。当弹丸的速度变得非常小或者高度超过设定的最大高度时,程序会停止计算。 完成计算之后,程序会输出弹丸的飞行轨迹、速度和其他相关参数。这些结果可以用于进一步分析和研究弹丸的飞行性能和特性。 总之,通用弹道仿真计算程序C源代码是一个基于物理学原理和数学模型的计算机程序,用于模拟弹丸的飞行情况。它通过迭代计算,预测和输出弹丸的飞行轨迹、速度和其他相关参数,为弹道飞行研究和分析提供了工具和数据支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

相对维度

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

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

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

打赏作者

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

抵扣说明:

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

余额充值