高斯坐标正反算c语言,高斯投影坐标正反算编程报告
《高斯投影坐標正反算編程報告》由會員分享,可在線閱讀,更多相關《高斯投影坐標正反算編程報告(11頁珍藏版)》請在人人文庫網上搜索。
1、高斯投影坐標正反算編程報告1. 編程思想進行高斯投影坐標正反算的編程需要牽涉到大量的公式,為了使程序條理更清楚,各塊的數據復用性更強,這里采取了結構化的編程思想。程序由四大塊組成。GeodesyHomework.cpp文件用于存放main()函數,是整個程序的入口。通過結構化的編程盡力使main()函數變得簡單。MyFunction.h和MyFunction.cpp用于存放計算過程中進行角度弧度換算時所要用到的一些自定的轉換函數。Zhengsuan.h和Zhengsuan.cpp用于存放Zhengsuan類,在Zhengsuan類中聲明了高斯投影坐標正算所要用到的所有變量,在類的構造函數中進行。
2、成員變量的初始化及正算計算。通過get函數獲得相應的正算結果。Fansuan.h和Fansuan.cpp用于存放Fansuan類,類似于Zhengsuan類,Fansuan類中聲明了高斯投影坐標反算所要用到的所有變量,在類的構造函數中進行成員變量的初始化及反算計算。通過get函數獲得相應的反算結果。2. 計算模型高斯投影正算公式高斯投影反算公式3. 程序框圖開始輸入B,L求定帶號N,中央緯度L0,緯度差l按照實用公式計算x,y換算為國家統一坐標X,Y輸出X,Y輸入國家統一坐標X,Y由Y取定帶號N,并換算出x,y求出中央經線L0按照實用公式計算B,lL=L0+l求出大地經度L輸出B,L結束正算反。
3、算4. 計算結果5. 附錄:程序代碼/主函數入口GeodesyHomework.cpp#include MyFunction.h#include Zhengsuan.h#include Fansuan.h#include using namespace std;void fansuan();void zhengsuan();void main()zhengsuan();fansuan();printf(/n over!);void zhengsuan()double myB,myL;coutmyXmyY;Fansuan myFansuan1(myX,myY);myFansuan1.printL。
4、ocation();/自定功能函數庫MyFunction.h#define PI 3.1415926#include using namespace std;double angleToDegree(int du,int fen,float miao);double angleToDegree();/將度分秒換算為度double degreeToRadian(double degree);double degreeToRadian();/將角度換算為弧度MyFunction.cpp#include MyFunction.hdouble angleToDegree(int du,int fen,。
5、float miao)double result=0;result=miao/3600.0+fen/60.0+du;return result;double angleToDegree()int du,fen;float miao;double result;coutdufenmiao;result=angleToDegree(du,fen,miao);return result;double degreeToRadian(double degree)double result=0;result=degree/57.295779513082321;return result;double de。
6、greeToRadian()double result,degree;degree=angleToDegree();result=degreeToRadian(degree);return result;/正算類Zhengsuan.h/ Zhengsuan.h: interface for the Zhengsuan class./#if !defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)#define AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A。
7、7B4466__INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#define rouSecond 206264.806247096355#include MyFunction.h#include #include using namespace std;class Zhengsuan public:Zhengsuan();Zhengsuan(double fB,double fL);double getX();double getY();double getrB();double getrL();void printLo。
8、cation();virtual Zhengsuan();private:double x;double y;/大地坐標double X;double Y;/國家統一坐標double B;double rB;int Bsecond;double L;double rL;/輸入的大地緯度B,大地經度L,rB,rL為對應弧度表示值,Bsecond為換算成秒數值int n;/帶號ndouble L0;/中央經線緯度L0double LDot;/緯度差L-L0int LDotSecond;/換算成秒的緯度差double l;double N;double a0;double a3;double a4;。
9、double a5;double a6;/七個計算參數;#endif / !defined(AFX_ZHENGSUAN_H__2655EA28_E810_44A3_8F14_56421A7B4466__INCLUDED_)Zhengsuan.cpp/ Zhengsuan.cpp: implementation of the Zhengsuan class./#include Zhengsuan.h/ Construction/Destruction/Zhengsuan:Zhengsuan()Zhengsuan:Zhengsuan(double fB,double fL)B=fB;rB=degr。
10、eeToRadian(fB);L=fL;rL=degreeToRadian(fL);Bsecond=B*3600;/初始化大地經度L,大地緯度B,Bsecond,按弧度的大地緯度rBn=(int)(L/6+1);/初始化帶號nL0=6*n-3;/中央經線經度,角度單位LDot=L-L0;/經度差LDotSecond=LDot*3600;l=(LDot)*3600/rouSecond;/計算參數lN=6399698.902-(21562.267-(108.973-0.612*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB);/計算參數Na0=3214。
11、0.404-(135.3302-(0.7092-0.004*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB);/計算參數a0a4=(0.25+0.00252*cos(rB)*cos(rB)*cos(rB)*cos(rB)-0.04166;/計算參數a4a6=(0.166*cos(rB)*cos(rB)-0.084)*cos(rB)*cos(rB);/計算參數a6a3=(0.3333333+0.001123*cos(rB)*cos(rB)*cos(rB)*cos(rB)-0.1666667;/計算參數a3a5=0.0083-(0.1667-(0.19。
12、68+0.004*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB)*cos(rB);/計算參數a5x=6367558.4969*Bsecond/rouSecond-(a0-(0.5+(a4+a6*l*l)*l*l)*l*l*N)*sin(rB)*cos(rB);/正算xy=(1+(a3+a5*l*l)*l*l)*l*N*cos(rB);/正算yX=x;Y=n*1000000+y+500000;/國家統一坐標Zhengsuan:Zhengsuan()double Zhengsuan:getX()return X;double Zhengsuan:getY()retu。
13、rn Y;void Zhengsuan:printLocation()printf(正算得國家統一坐標為: X= %8.8f Y=%8.8f n,X,Y);double Zhengsuan:getrB()return rB;double Zhengsuan:getrL()return rL;/反算類Fansuan.h/ Fansuan.h: interface for the Fansuan class./#if !defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_)#define AFX_FANSUAN。
14、_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#define rouSecond 206264.806247096355#include #include MyFunction.h#include using namespace std;class Fansuan public:Fansuan();Fansuan(double X,double Y);double getB();double getL();void printLocati。
15、on();virtual Fansuan();private:double x;double y;/高斯投影坐標double X;double Y;int N;/國家統一坐標,N為帶號double B,Bsecond;double L;/最后反算得到B、Ldouble L0;/中央經線經度double l,lsecond;/L=L0+l,L0=6*N-3double Bf,BfSecond,BfDegree;double beta,betaSecond,betaDegree;double Z;double Nf;double b2;double b3;double b4;double b5;/。
16、計算的8個參數;#endif / !defined(AFX_FANSUAN_H__5B5E4668_EE81_463F_8D65_FFE2AEACE745__INCLUDED_)Fansuan.cpp/ Fansuan.cpp: implementation of the Fansuan class./#include Fansuan.h/ Construction/Destruction/Fansuan:Fansuan()Fansuan:Fansuan(double X,double Y)this-X=X;this-Y=Y;/初始化x,yN=(int)(Y/1000000);/取出帶號L0=。
17、6*N-3;/初始化該帶號的中央經線經度x=X;y=Y-1000000*N-500000;beta=x/6367558.4969;/初始化beta,弧度單位betaSecond=beta*rouSecond;/初始化beta,秒單位betaDegree=betaSecond/3600;/初始化beta,整度數單位Bf=beta+(50221746+(293622+(2350+22*cos(beta)*cos(beta)*cos(beta)*cos(beta)*cos(beta)*cos(beta)*(1e-10)*sin(beta)*cos(beta);/初始化Bf,弧度單位BfSecond=。
18、Bf*rouSecond;/初始化Bf,秒單位BfDegree=BfSecond/3600;/初始化Bf,整度數單位Nf=6399698.902-(21562.267-(108.973-0.612*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf);Z=y/(Nf*cos(Bf);b2=(0.5+0.003369*cos(Bf)*cos(Bf)*sin(Bf)*cos(Bf);b4=0.25+(0.16161+0.00562*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf);b3=0.333333-(0.166667-0.001123*。
19、cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf);b5=0.2-(0.166667-0.0088*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf);Bsecond=BfSecond-(1-(b4-0.12*Z*Z)*Z*Z)*Z*Z*b2*rouSecond;/計算大地經度B,單位為秒B=Bsecond/3600;/用整度數表示Blsecond=(1-(b3-b5*Z*Z)*Z*Z)*Z*rouSecond;/計算經度差l,單位為秒l=lsecond/3600;/用整度數表示lL=L0+l;/計算大地經度Ldouble Fansuan:getB()return B;double Fansuan:getL()return L;void Fansuan:printLocation()printf(反算得大地坐標為:大地緯度B= %f 大地經度L=%fn,B,L);Fansuan:Fansuan(。
總結
以上是生活随笔為你收集整理的高斯坐标正反算c语言,高斯投影坐标正反算编程报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 武汉linux驱动培训转让,linux驱
- 下一篇: c语言简易绘图程序代码,简单的鼠标绘图程