#ifndef CALPOINT_H #define CALPOINT_H #include "qglobal.h" #include #include "QDebug" // 定义常量 const double Re = 6378.14; // 地球半径,km const double PI = 3.14159265358979323846; const double Heading_IMUBase =63.888; const double Pitch_IMUBase = -0.121; const double Roll_IMUBase = -0.082; const double Heading_OPABase=64.062; const double Pitch_OPABase = -0.332; const double Roll_OPABase = 89.812; const double OpticalAxisAngle_N0=90; const double OpticalAxisAngle_E0= 90; const double OpticalAxisAngle_D0=0; // 角度转弧度函数 double deg2rad(double deg) { return deg * PI / 180.0; } // 弧度转角度函数 double rad2deg(double rad) { return rad * 180.0 / PI; } // 模运算函数 double mod(double x, double y) { return x - y * std::floor(x / y); } // 矩阵乘法函数 void matrixMultiply(double A[3][3], double B[3][3], double result[3][3]) { for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { result[i][j] = 0; for(int k=0; k<3; k++) { result[i][j] += A[i][k] * B[k][j]; } } } } void matrixMultiplyVector(double A[3][3], double B[3], double result[3]) { for(int i=0; i<3; i++) { result[i] = 0; for(int j=0; j<3; j++) { result[i] += A[i][j] * B[j]; } } } QVector calRes(double Lon_A,double Lat_A,double Hei_A,double Lon_B,double Lat_B, double Hei_B,double HeadingReal,double PitchReal,double RollReal){ // 将角度由度转化为弧度 double Lon_A_Rad = deg2rad(Lon_A); // A机经度,rad double Lat_A_Rad = deg2rad(Lat_A); // A机纬度,rad double Lon_B_Rad = deg2rad(Lon_B); // B机经度,rad double Lat_B_Rad = deg2rad(Lat_B); // B机纬度,rad // 双机位置(地心直角坐标系)及双机距离,km double X_A = (Re + Hei_A) * std::cos(Lat_A_Rad) * std::cos(Lon_A_Rad); double Y_A = (Re + Hei_A) * std::cos(Lat_A_Rad) * std::sin(Lon_A_Rad); double Z_A = (Re + Hei_A) * std::sin(Lat_A_Rad); double X_B = (Re + Hei_B) * std::cos(Lat_B_Rad) * std::cos(Lon_B_Rad); double Y_B = (Re + Hei_B) * std::cos(Lat_B_Rad) * std::sin(Lon_B_Rad); double Z_B = (Re + Hei_B) * std::sin(Lat_B_Rad); // B机相对于A机的直角坐标,km double XYZ_BA[3] = {X_B - X_A, Y_B - Y_A, Z_B - Z_A}; // 双机距离,km double D_BA = std::sqrt(XYZ_BA[0]*XYZ_BA[0] + XYZ_BA[1]*XYZ_BA[1] + XYZ_BA[2]*XYZ_BA[2]); qDebug()<< "双机距离: "< res; res.append(OpticalAxisRotate_E); res.append(OpticalAxisRotate_N); return res; } #endif // CALPOINT_H