资源简介

使用C++语言编写的基于控制台的应用程序:可以选择高斯投影正算或者反算。输入指定参数返回结果

资源截图

代码片段和文件信息

// GaussProjection.cpp: 定义控制台应用程序的入口点。
//

#include “stdafx.h“
using namespace std;
#define PI 3.1415926535897932
#define ROU 206264.806247096355

/*Bi的递推函数*/
double fun(double a2 double a4 double a6 double a8 double B)
{
return -a2 * sin(2 * B) / 2 + a4 * sin(4 * B) / 4 - a6 * sin(6 * B) / 6 + a8 * sin(8 * B) / 8;
}

/*高斯投影坐标正算*/
/*示例输入*/
/* 30.5 12000 6378245 0.006693421622966 0.006738525414683 */
/* 30.5 12000 6378140 0.0066943849995888 0.006739501819473 */
double CoordinateCalculate(void)
{
double B_degree angle_second a e2 e12;
double B_rad w t yita2 m0 m2 m4 m6 m8 X;
double N a0 a2 a4 a6 a8 x y;
cout << “请输入角度B(单位为度)、角度l(单位为秒)、实数a、实数e2、实数e12“ << endl;
cin >> B_degree >> angle_second >> a >> e2 >> e12;
/*处理过程*/
B_rad = B_degree * PI / 180; w = sqrt(1 - e2 * pow(sin(B_rad) 2));
t = tan(B_rad); N = a / w; yita2 = e12 * pow(cos(B_rad) 2);
m0 = a * (1 - e2); m2 = 3 * e2*m0 / 2; m4 = 5 * e2*m2 / 4;
m6 = 7 * e2*m4 / 6; m8 = 9 * e2*m6 / 8;
a0 = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;
a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
a6 = m6 / 32 + m8 / 16; a8 = m8 / 128;
X = a0 * B_rad - a2 * sin(2 * B_rad) / 2 + a4 * sin(4 * B_rad) / 4 - a6 * sin(6 * B_rad) / 6 + a8 * sin(8 * B_rad) / 8;
x = X + N * sin(B_rad)*cos(B_rad)*pow(angle_second 2) / (2 * pow(ROU 2)) +
N * sin(B_rad)*pow(cos(B_rad) 3)*(5 - pow(t 2) + 9 * yita2 + 4 * pow(yita2 2))*pow(angle_second 4) / (24 * pow(ROU 4)) +
N * sin(B_rad)*pow(cos(B_rad) 5)*(61 - 58 * pow(t 2) + pow(t 4))*pow(angle_second 6) / (720 * pow(ROU 6));
y = N * cos(B_rad)*angle_second / ROU + N * pow(cos(B_rad) 3)*(1 - pow(t 2) + yita2)*pow(angle_second 3) / (6 * pow(ROU 3)) +
N * pow(cos(B_rad) 5)*(5 - 18 * pow(t 2) + pow(t 4) + 14 * yita2 - 58 * yita2*pow(t 2))*pow(angle_second 5) / (120 * pow(ROU 5));
cout << fixed << “x = “ << x << “\t\ty = “ << y<<“\tX = “< cout << “N = “ << N << “\tt = “ << t << “\tyita2 = “ << yita2 << endl;
return 0.0;
}

/*高斯投影坐标反算*/
/*示例输入*/
/* 3380330.773 320089.9761 6378245 0.006693421622966 0.006738525414683 */
/* 3380272.288636 320084.740 6378140 0.0066943849995888 0.006739501819473 */
float InvCoordinateCalculate(void)
{
double x y a e2 e12;
double a2 a8 m0 m2 m4 m6 m8 X tf yitaf2 W Mf Bf B0;
double B l a0 a4 a6 Nf;
/*计算过程*/
cout << “请分别输入x,y,a,e2,e12的值:“ << endl;
cin >> x >> y >> a >> e2 >> e12;
m0 = a * (1 - e2); m2 = 3 * e2*m0 / 2; m4 = 5 * e2*m2 / 4;
m6 = 7 * e2*m4 / 6; m8 = 9 * e2*m6 / 8;
a0 = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;
a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
a6 = m6 / 32 + m8 / 16; a8 = m8 / 128; X = x;
/*计算Bf的值*/
B0 = X / a0;
do 
{
double out = fun(a2 a4 a6 a8 B0);
double B1 = (X - out) / a0;
if (abs(B1 - B0) < 10e-8)
{
Bf = B0;
br

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8250  2018-05-23 12:07  GaussProjection\GaussProjection.cpp

     文件       8227  2018-05-21 23:39  GaussProjection\GaussProjection.vcxproj

     文件       1256  2018-05-21 23:39  GaussProjection\GaussProjection.vcxproj.filters

     文件        332  2018-05-21 23:39  GaussProjection\stdafx.cpp

     文件        442  2018-05-22 22:45  GaussProjection\stdafx.h

     文件        370  2018-05-21 23:39  GaussProjection\targetver.h

     文件       1459  2018-05-21 23:39  GaussProjection.sln

     目录          0  2019-04-28 17:18  GaussProjection

----------- ---------  ---------- -----  ----

                20336                    8


评论

共有 条评论