書接上文,這篇文章介紹具體的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運行。
?