书接上文,这篇文章介绍具体的VC++编程实现,代码实操。任何一个算法,你必须将其编写为代码,运行结果正确,才算真正掌握了,否则都是似懂非懂,一知半解,下面先给出仿真结果的截图,文末有整个项目程序文件的下载链接,下载后可以直接打开运行。
利用Visual studio 2012创建一个Win 32控制台的应用程序项目,项目的名字为Rqeqb_project,创建好工程项目之后,利用类向导添加类:CElevation_Azimuth_Calculation,会同时生成头文件Elevation_Azimuth_Calculation.h和源文件Elevation_Azimuth_Calculation.cpp,在类CElevation_Azimuth_Calculation里面定义如下的成员函数,
void Position_coordinate_transformation(double x_input,double y_input,double z_input, double BM0_source, double LambdaM0_source,
double hM0_source, double BM0_goal, double LambdaM0_goal, double hM0_goal, double &x_output,double &y_output,
double &z_output, double &R_output, double &Qb_out, double &Qe_out) ; //己知源点和目标点的经纬高,求源点地理坐标系中的物体在目标点地理坐标系中的坐标
void Geodetic_Coordinate_System_to_2000( double B_in, double lamda_in, double h_in, double P2000_out[3]); //大地坐标与2000地心直角坐标之间的转换
void MAT_3mul(double A[3][3], double B[3][3], double C[3][3]); //A3*3乘以B3*3
void MAT_31mul(double A[3][3], double B[3], double C[3]); //A3*3乘以B3
void MAT_31add(double A[3],double B[3],double C[3]);
void MAT_31sub(double A[3], double B[3] , double C[3]);
void MAT_231_form(double psi, double theta, double gamma, double A[3][3]); //近程飞行器用的231转序,先偏航,后俯仰再滚转
程序的文件架构为,
程序的界面如下,
头文件Elevation_Azimuth_Calculation.h的代码为,
#pragma once
#include <math.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define pi 3.1415926536
#define rad2deg_GL 57.2957795
class CElevation_Azimuth_Calculation
{
public:
CElevation_Azimuth_Calculation(void);
void Position_coordinate_transformation(double x_input,double y_input,double z_input, double BM0_source, double LambdaM0_source,
double hM0_source, double BM0_goal, double LambdaM0_goal, double hM0_goal, double &x_output,double &y_output,
double &z_output, double &R_output, double &Qb_out, double &Qe_out) ; //己知源点和目标点的经纬高,求源点地理坐标系中的物体在目标点地理坐标系中的坐标
void Geodetic_Coordinate_System_to_2000( double B_in, double lamda_in, double h_in, double P2000_out[3]); //大地坐标与2000地心直角坐标之间的转换
void MAT_3mul(double A[3][3], double B[3][3], double C[3][3]); //A3*3乘以B3*3
void MAT_31mul(double A[3][3], double B[3], double C[3]); //A3*3乘以B3
void MAT_31add(double A[3],double B[3],double C[3]);
void MAT_31sub(double A[3], double B[3] , double C[3]);
void MAT_231_form(double psi, double theta, double gamma, double A[3][3]); //近程飞行器用的231转序,先偏航,后俯仰再滚转
virtual ~CElevation_Azimuth_Calculation(void);
};
源文件Elevation_Azimuth_Calculation.cpp的代码为,
余下的代码请关注Wechat Public Platform“弹道制导控制业余爱好者”的文章:《地球表面附近两点之间距离、高低角和方位角的计算方法,VC++代码实操!》,里面有项目程序的下载链接,下载后程序可以直接在Visual studio 2012运行。