資源簡介
使用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“?< 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?< cout?<“N?=?“?< 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的值:“?< 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
評論
共有 條評論