资源简介
使用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
相关资源
- 图灵机用作转换器计算x的y次幂,含
- 状态转换图c语言编译原理
- 7参数坐标转换源代码
- VC使用GDI+将BMP图像转换为JPG格式
- NFA到DFA的转换C语言实现
- c++实现数字转换英文无and
- 实现三维坐标变换、投影变换,C++实
- MFC写的棋盘,可以保存坐标数据
- 如何将字符转换成ASCII
- 图像批量格式转换jpg,bmp,tif,png小
- 高斯投影正算C++源代码
- VC++ 中实现进制2进制,10进制,16进制
- sln转换dsw
- 将png格式图片转换成YUV格式,C++
- C++代码转换成C#工具
- c/c++采用编码转换表实现gbk与unicode互
- 编译原理课程设计——算术表达式、
- C语言jpg转换成bmp格式代码
- 网易云ncm付费音乐格式转换为MP3
- ASCII码转换C语言
- SAR_雷达影像处理源代码
- C语言获取鼠标点击的位置坐标
- 操作系统 虚拟存储器地址转换
- c++c#结构体转换工具
- 用C语言实现NFA到DFA的转换过程
- 七参数坐标转换C语言代码
- 七参数坐标转换小程序
- ply2pcd文件转换
- 计算机图形学直线段的扫描转换C++实
- 用栈实现十进制转换成二进制(c语言
评论
共有 条评论