




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、測繪程序課程設計報告一、課程設計概述:1、課程設計目的使學生能夠在學習完VC.net程序設計基礎、測量學、測量平差等課程的基礎上,進一步鞏固這些知識,并培養(yǎng)學生的綜合應用能力。2、課程設計時間7月18日7月31日,共兩周時間。3、課程設計內(nèi)容設計一個邊角網(wǎng)平差的程序。二、系統(tǒng)設計:1、需求分析控制網(wǎng)平差程序對野外控制網(wǎng)觀測數(shù)據(jù)進行平差數(shù)據(jù)處理,其目的就是根據(jù)最小二乘原理,消除網(wǎng)中的各種幾何矛盾,求出全網(wǎng)各待定元素,即未知點的平面坐標或三維坐標。2、實現(xiàn)功能2.1 優(yōu)化設計:根據(jù)控制網(wǎng)的觀測精度與網(wǎng)形,全面評定網(wǎng)的精度2.2 數(shù)據(jù)輸入:使用外部數(shù)據(jù)倒入,通過讀取.txt格式觀測文件實現(xiàn)數(shù)據(jù)輸入2
2、.3 概算:主要是進行近似坐標的推算。2.4 平差計算:對觀測數(shù)據(jù)進行精密平差計算,得到平差后的點位坐標,方向觀測值,邊長觀測值等,精度評定。2.5 成果輸出:控制網(wǎng)圖形輸出,繪制誤差橢圓,以及平差結果導出到txt文件中。3、系統(tǒng)總體框架導線網(wǎng)平差系統(tǒng)4、數(shù)據(jù)輸入模塊4.1 文件格式定義:7Surveyor,panlinRecorder,panlinDate,2011-7-19Meteorogy,30,100,0.7AngleAccuracy,2DistanceAccuracy,2,2StationCount,5StationName,1,2,3,4,5ENDHeaderGivendataCo
3、or,21,31250.25,11500.412,33256.57,10900.84ENDGivendata文件頭,說明觀測信息已知數(shù)據(jù),其中:Coor是指已知點,Dist指已知邊,Angle指已知角,三者后邊的數(shù)值是指,已知數(shù)據(jù)個數(shù)。ObsdataAngle,181,2,01,3,57.2032101,4,113.1406352,5,02,3,32.1222922,4,57.5015302,1,98.2612733,1,03,2,56.2537793,5,172.5339443,4,282.2953834,1,04,2,26.0954124,3,46.3617984,5,77.5946715
4、,4,05,3,39.0017795,2,70.195151Dist,811,3,2300.0601,4,3090.3532,5,3643.2342,3,2115.9192,4,4363.6113,5,2169.073Angle為方向觀測標志,18為方向觀測值個數(shù),所以從下行開始的18行均為方向觀測值Dist為邊長觀測標志,8為邊長觀測值個數(shù),所以從下行開始的8行均為邊長觀測值3,4,2620.9094,5,3922.860ENDObsdataH觀測數(shù)據(jù)結束標志需要注意的是,StationCountStationName并不見指測站數(shù)和測站名,而是指控制點數(shù)和控制點名(主要是指節(jié)點網(wǎng),這種情況
5、中并不是所有的點都進行擺站了,如附合導線,有一個已知點就沒有擺站觀測)。對StationName的說明:未 擺 站 的 已 知 占 八、擺 站 的 已 知 占 八、未 知 占 八、StationName,1,2,3,4,54.2 數(shù)據(jù)輸出流圖文 件 導 入數(shù)據(jù)編輯數(shù)據(jù)輸入4.3 具體實施先是定義一個類CcontrolPoint,這個類可以沒有.cpp文件,只是用來定義控制點ControlPointData、方向角觀測值CBearingObs、距離觀測值CdistObs,以及頭文件fileheader的格式,這個類編譯好之后,就可以為數(shù)據(jù)輸入服務了。數(shù)據(jù)輸入的具體實施是,在Ccontrolnet
6、AdjustmentDlg.h中定義以下幾個公有變量:fileheaderheader;/頭文件實現(xiàn)頭文件輸入ControlPointData*KnownPoint;/已知點intKnownPointCount;/已知點個數(shù)CDistObs*KnownDist;/已知邊intKnownDistCount;已知邊個數(shù)CBearingObs*KnownBearing;/已知方向角intKnownBearingCount;/已知方向角個數(shù)實現(xiàn)已知數(shù)據(jù)的輸入CDistObs*ObsDist;/觀測邊intObsDistCount;/觀測邊個數(shù)CBearingObs*ObsBearing;/觀測方向角i
7、ntObsBearingCount;/觀測方向角個數(shù)實現(xiàn)觀測數(shù)據(jù)的輸入這樣在txt文件導入之后,通過MFC文件讀取方法逐行讀入數(shù)據(jù),然后通過調用分割函數(shù)SplitString,通過ENDHeaderGivendata這些標志,逐行進行分割,將值賦給上述變量中,這樣就把數(shù)據(jù)導入到程序中了。5、近似坐標推算模塊:5.1 近似坐標推算原理:5.1.1 按方向觀測值計算三角網(wǎng)中待定點的近似坐標(前方交會)(1)XaCtgBXbCtgAyayctgActgByaCtgBybCtgAXaXbctgActgB5.1.2 按邊長觀測值計算三邊網(wǎng)中待定點的近似坐標(邊長交會),先按公式計算三角形的內(nèi)角,再用公式
8、(1)計算待定點的坐標i,cos (S2 s2 S22s0sl1 ,)B cos (SoS2Si22s0 s25.1.3 按方向和邊長觀測值計算導線網(wǎng)中待定點的近似坐標tabdxk xa d costVk Va d sintXa d cos(tab AVa d sin(tab A)比較上述三種方法可以發(fā)現(xiàn),第一和第二種方法,在近似坐標推算時必須搜索三角形,才能計算,換句話來說就是適用于三角網(wǎng),在通用性上顯然不合理。而且,本次試驗采用的是邊角網(wǎng)的觀測數(shù)據(jù),對于第一種只按角推算和第二種只按邊推算,顯然也是不合適的。而第三種極坐標推算的方法,對所有網(wǎng)形均適用,從通用性和數(shù)據(jù)合理利用這兩面考慮,所以我
9、采用第三種極坐標推算的方法。在具體計算中采用逐點解算法,選擇已知點或已計算出坐標的點作為起算點,根據(jù)具體的圖形,來逐個推算出各點的坐標。這種方法比較容易實現(xiàn),而對于整體解算的方法,對所有未知點進行整體解算,實現(xiàn)起來太困難。5.2 計算流圖坐標輸入系統(tǒng)再次從i=0循環(huán)否5.3 具體實施在文件讀入數(shù)據(jù)時,文件頭中有StationName這一項,在讀入控制點名后,就會動態(tài)創(chuàng)建類型為類ControlPointData對象的數(shù)組header.StationCoor,然后把已知點數(shù)據(jù)傳入到header.StationCoor中。header.StationCoor創(chuàng)建的目的就是進行存儲所有的控制點坐標,方
10、便以后的數(shù)據(jù)調用和數(shù)據(jù)更新。經(jīng)過上述中5.3的循環(huán)計算,這樣所有的未知點近似坐標均已經(jīng)計算出來,存入到這個數(shù)據(jù)中。需要注意的是,在近似坐標推算中,循環(huán)計算一次之后,必須判斷是否所有未知點的近似坐標已經(jīng)推算出來,沒有的話再進行循環(huán)計算。(這樣做主要是為了防止在節(jié)點控制網(wǎng)中,當未知點很多時,可能推算到一個點之后,它所連得所有控制點均為坐標未知點,這樣在一次循環(huán)中就會跳過這個控制點,這個點的近似坐標就沒有計算出來。而在下一次循環(huán)中,它所連得控制點中就會有坐標已知點,這樣這個點的近似坐標就計算出來了)。6、平差計算模塊平差有兩種方式,一種是條件平差,一種是間接平差。條件方程式較少,占用內(nèi)存小,但條件方
11、程與網(wǎng)形有關,很難編制通用的程序o間接平差一個觀測值就是一個誤差方程,占用內(nèi)存相對較大,但易于編程解算,容易編制通用的程序。從程序編制和程序的通用性考慮,所以選擇間接平差的方法。6.1 平差計算原理:6.1.1 間接平差基本原理設:觀測值為L,其權為P,相應的改正數(shù)為V,必要觀測值個數(shù)為t,選定未知數(shù)X,則有誤差方程VBXL根據(jù)最小二乘原理:vTpvmin,求極值,(VTPV)TVTL-2VTP2VTPB0xxBTPV0,BTP(BXL)0,BTPBXBTPL0,得:法方程:BTPBXBTPL0法方程的解:X(BTPB)1BTPL、VTPV/(nt)單位權中誤差:6.1.2 間接平差流程6.1
12、.2.1 列出誤差方程及條件式 定權 組成法方程 解算法方程,求得dX=dx1dy1dx2dy 平差后的坐標值計算X=X+dX。 精度評定,計算誤差橢圓參數(shù)等6.1.3 誤差方程的列立以未知點坐標為平差對象,一個觀測值對應一個誤差方程式,誤差方程式包括兩類:方向觀測誤差方程式和邊長觀測誤差方程式(1)方向觀測誤差方程式般形式:VZaXbYaXbYl其中:jjijiijiijjijjijaijsinTij0bD0 ,bij ijcosTj0Di0lijZi0Tij0Lij48ZiY° Y0Tij0 a9tg VmX
13、 j Xi當測站點i為已知點時:Vj 當照準點j為已知點時:Vij當側站點和照準點都為已知點時: (2)邊長觀測誤差方程式乙 aij Xj b Yj lij乙 aij XibijYilijV Z lij j ijVijl .ijcosTij0 XisinTij0 YcosTij0 XjsinTij0 Yjlijs j0般取測站起始方向(零方向)的近似坐標方位角作為定向角近似值當測站點i為已知點時: 當照準點j為已知點時:VijVijSij0為近似坐標計算而得,Sij為實測邊長cosTij0XjsinTij0YjlijcosTj0XisinTj0Ylj6.1.4 定權(1)方向觀測值的權在等精度
14、方向觀測的控制網(wǎng)中,一般把方向觀測值的權定為(2)邊長觀測值的權2Ps而Ms=A+B*S/1000;其中S單位為Km,這樣的話Ms單位為mm6.1.5 平差后的坐標值計算求得平差后的坐標值X=X+dX。因為只有dx很小時誤差方程式、條件方程式才是嚴密的,因此當dX的值較大時應把X=X_+dX作為新的近似值重復 6.124步,直到dx中絕對值最大的一個小于給定的0.1mm(注意:這里只是指坐標改正值,不包括定向改正值,所以在求dx中絕對值最大值時,應除去定向改正值,否則會無限迭代計算,因為定向改正值很大,而且迭代計算時不會進行改正)。6.1.6 精度評定一中誤差計算:mNPV/為觀
15、測值個數(shù),t為未知數(shù)個數(shù)m0-nt待定點點位誤差:mxmo.Qxx,mymoQyy22mkmo.mxmy誤差橢圓元素計算:長半徑方位角Q1arctg2Qxy2QxxQyy長半徑、短半徑em。;QxxQxytgQ,Emo.QxxQxytg(Q900)6.2平差計算流程圖:一些運算覆,可以實現(xiàn)矩陣轉置、求逆、相乘、相減得運算,所以就可以計算出Nbb=(B)*P*B;Nvv=(-1)*(B)*P*L);Dx=(Nbb.Inv()*Nvv),改正數(shù)計算出來之后,將坐標改正數(shù)加到原有近似坐標上,判斷如果坐標改正數(shù)的最大值(絕對值)大于0.1mm(注意是大于0.1mmt是迭代終止條件,不要寫成小于0.1m
16、m),重復上述步驟繼續(xù)迭代計算,直到坐標改正數(shù)的最大值(絕對值)小于0.1mm迭代計算終止,這時求出的坐標即為平差后坐標。坐標改正數(shù)Dx求出來之后,就可以求得觀測值改正數(shù)矩陣V,V求出來之后,就可以計算出單位權中誤差m0,進而計算出點位中誤差、誤差橢圓參數(shù)。7、成果輸出模塊成果輸出模塊有兩方面,一方面是平差結果的輸出,另一方面是圖形繪制。對于平差結果的輸出這一方面,主要是輸出方向觀測成果表、距離觀測成果表、精度評定以及控制點成果表這四方面內(nèi)容,對于這部分的輸出比較容易實現(xiàn),只要建立Cstring對象,調用庫函數(shù).format()來定義輸出格式,來進行格式化輸出,就很容易實現(xiàn)。對于圖形的繪制,需
17、要鏈接到另一個Dialog來繪制,這涉及到一些建類、數(shù)據(jù)傳輸?shù)膬?nèi)容,下面詳細介紹這部分內(nèi)容。7.1圖形繪制流程圖:繪圖調用主繪圖函數(shù)添加消息函數(shù)72具體頭施函數(shù)Error曰lipseDraw由于繪圖在另一個Dialog中進行,所以必一在CcontroinetAdjustmehtDlg中能夠調用繪圖的Dialogo主要是在建立Dialog之后,給這個Dialog添加一個類DrawGraph,這樣就可以在CcontrolnetAdjustmentDlg中通過建立DrawGraph的對象draw,通過調用庫函數(shù)draw.DoModal()來打開Dialog了。不過在這之前要進行數(shù)據(jù)傳輸,主要是在Cc
18、ontrolnetAdjustmentDlg中通過調用Draw的成員變量,將值傳輸?shù)筋怐rawGraph中。之后在類DrawGraph中添加消息函數(shù)OnPaint(),這樣在在CcontrolnetAdjustmentDlg中調用庫函數(shù)draw.DoModal()之后,就會跳到類DrawGraph中的消息函數(shù)OnPaint()進行繪I在函數(shù)OnPaint()中會調用函數(shù)StepLength,通過比較實際坐標的最大值、最小值,以及窗口大小來確定繪圖的步長。之后調用函數(shù)ControlNet來進行主要的繪圖工作,主要是坐標軸、控制網(wǎng)網(wǎng)形、誤差橢圓、以及繪圖比例尺的繪制,其中誤差橢圓的繪制時調用函數(shù)E
19、rrorEllipseDraw來繪制。程序設計計劃與進度表:編號:完成內(nèi)容:日期:1系統(tǒng)的總體設計、編制作業(yè)進度表7月18日7月19日2數(shù)據(jù)輸入7月20日3近似坐標的推算7月20日4平差計算7月21日7月22日5控制網(wǎng)網(wǎng)形、誤差橢圓的繪制7月23日6代碼修改、程序整改、修飾工作7月24日7月25日7實驗報告的編寫7月26日7月28日程序代碼:1. ControlPoint.h#pragmaonce#include"Angle.h"classControlPointDatapublic:doubleX,Y;/坐標值CStringstrName;/控制點名doubledE,dF
20、;/誤差橢圓的長半軸和短半軸CAngledAlfa;/誤差橢圓長半軸的方位角doubledMx,dMy,dM;/點位誤差doubleQxx,Qyy,Qxy;/協(xié)因數(shù);/距離觀測值類classCDistObspublic:CDistObs(void)dDist=0;CDistObs(void);public:ControlPointDatacpStart,cpEnd;/起點和終點doubledDist;/距離觀測值;/方向觀測值類classCBearingObspublic:CBearingObs(void);CBearingObs(void);public:ControlPointDatacp
21、Station;/測站點ControlPointDatacpObject;/照準點CAngleangleObsValue;/方向觀測值;classMeteo/氣象參數(shù)public:doubletemperature;/溫度doublepressure;/氣壓doublehumidity;/相對濕度;classDistanceAccu/儀器距離觀測精度信息public:doublea;doubleb;classfileheaderpublic:CStringSurveyor;/觀測值CStringRecorder;/記錄者CStringDate;/觀測日期MeteoMeteorogy;/氣象參數(shù)
22、doubleAngleAccuracy;/儀器方向觀測精度信息DistanceAccuDistanceAccuracy;/儀器距離觀測精度信息intStationCount;/控制點個數(shù)intOriAngleCount;/測站個數(shù)ControlPointData*StationCoor;/控制點坐標信息;2. ControlnetAdjustmentDlg.h#pragmaonce#include"ControlPoint.h"#include"Matrix.h"/CControlnetAdjustmentDlg對話框classCControlnetAd
23、justmentDlg:publicCDialog/構造publicCControlnetAdjustmentDlg(CWnd*pParent=NULL);/標準構造函數(shù)CControlnetAdjustmentDlg();/析構函數(shù)/對話框數(shù)據(jù)enumIDD=IDD_CONTROLNETADJUSTMENT_DIALOG;protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDV支持/實現(xiàn)protected:HICONm_hIcon;/生成的消息映射函數(shù)virtualBOOLOnInitDialog();afx_msgvoi
24、dOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:doubleAzimuth(doubleX1,doubleY1,doubleX2,doubleY2);/求方位角,返回弧度intsgn(doubleX);/符號函數(shù)doubleOutX(CStringstrName);/導出XdoubleOutY(CStringstrName);/導出YintKnoworUnKnow(CStringstrName);/判斷一個控制
25、點是否已知,已知返回,未知返回-1doubleMax(CMatrixB,intm,intn);/求矩陣中最大值doubleXKnoworUnKnow();/求控制點坐標中是否還存在未知點,存在返回,不存在返回-1CStringObsdata;/顯示觀測數(shù)據(jù)afx_msgvoidOnBnClickedRadio1();/數(shù)據(jù)讀入CString*SplitString(CStringstr,charsplit,int&iSubStrs);/分割函數(shù)voidadjustment(CMatrix&B,CMatrix&L,CMatrix&P);/平差函數(shù)fileheade
26、rheader;/頭文件ControlPointData*KnownPoint;/已知點intKnownPointCount;/已知點個數(shù)CDistObs*KnownDist;/已知邊intKnownDistCount;/已知邊個數(shù)CBearingObs*KnownBearing;/已知方向角intKnownBearingCount;/已知方向角個數(shù)CDistObs*ObsDist;/觀測邊intObsDistCount;/觀測邊個數(shù)CBearingObs*ObsBearing;/觀測方向角intObsBearingCount;/觀測方向角個數(shù)CStringOutData;/用來輸出計算信息(
27、概算、平差等)afx_msg voidafx_msg voidafx_msg voidafx_msg voidafx_msg voidOnBnClickedRadio2();/坐標推算OnBnClickedRadio3();/平差計算OnBnClickedRadio4();/文件保存OnBnClickedRadio5();/網(wǎng)圖顯示OnBnClickedOk();/清屏;3. ControlnetAdjustmentDlg.cpp#include"stdafx.h"#include"ControlnetAdjustment.h"#include"
28、;ControlnetAdjustmentDlg.h"#include"ControlPoint.h"#include<locale.h>#include"math.h"#include"Matrix.h"#include"DrawGraph.h"#ifdef_DEBUG#definenewDEBUG_NEW#endifpParent /*=NULL*/ ) / 標CControlnetAdjustmentDlg:CControlnetAdjustmentDlg(CWnd*準構造函數(shù):CDia
29、log(CControlnetAdjustmentDlg:IDD,pParent),Obsdata(_T(""),OutData(_T("")m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);KnownDist=NULL;/初始化KnownPoint=NULL;KnownBearing=NULL;ObsDist=NULL;ObsBearing=NULL;header.StationCoor=NULL;CControlnetAdjustmentDlg:CControlnetAdjustmentDlg()/析構函
30、數(shù)/釋放空間if(KnownPoint!=NULL)deleteKnownPoint;KnownPoint=NULL;if(KnownDist!=NULL)deleteKnownDist;KnownDist=NULL;if(KnownBearing!=NULL)deleteKnownBearing;KnownBearing=NULL;if(ObsDist!=NULL)deleteObsDist;ObsDist=NULL;if(ObsBearing!=NULL)deleteObsBearing;ObsBearing=NULL;if(header.StationCoor!=NULL)deleteh
31、eader.StationCoor;header.StationCoor=NULL;char split, int &CString*CControlnetAdjustmentDlg:SplitString(CStringstr,iSubStrs)/分割函數(shù)intiPos=0;/分割符位置intiNums=0;/分割符的總數(shù)CStringstrTemp=str;CStringstrRight;/先計算子字符串的數(shù)量while(iPos!=-1)iPos=strTemp.Find(split);if(iPos=-1)break;strRight=strTemp.Mid(iPos+1,st
32、r.GetLength();strTemp=strRight;iNums+;if(iNums=0)/沒有找到分割符/子字符串數(shù)就是字符串本身iSubStrs=1;returnNULL;/子字符串數(shù)組iSubStrs=iNums+1;/子串的數(shù)量=分割符數(shù)量+1CString*pStrSplit;pStrSplit=newCStringiSubStrs;strTemp=str;CStringstrLeft;for(inti=0;i<iNums;i+)iPos=strTemp.Find(split);/左子串strLeft=strTemp.Left(iPos);/右子串strRight=st
33、rTemp.Mid(iPos+1,strTemp.GetLength();strTemp=strRight;pStrSpliti=strLeft;pStrSplitiNums=strTemp;returnpStrSplit;voidCControlnetAdjustmentDlg:OnBnClickedRadio1()/數(shù)據(jù)讀入/TODO:在此添加控件通知處理程序代碼CFileDialogdlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt");if(
34、dlgFile.DoModal()=IDCANCEL)return;CStringstrFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFilesf;if(!sf.Open(strFileName,CFile:modeRead)return;CStringstrLine;intn1;CString*strTmp=NULL;while(strLine!=_T("ENDHeader")/讀取文件頭sf.ReadString(strLine);Obsdata+=strLine;Obsdata+
35、=_T("rn");if(strLine!=_T("ENDHeader")strTmp=SplitString(strLine,',',n1);elsebreak;if(strTmp0="Surveyor")header.Surveyor=strTmp1;elseif(strTmp0="Recorder")header.Recorder=strTmp1;elseif(strTmp0="Date")header.Date=strTmp1;elseif(strTmp0="M
36、eteorogy")header.Meteorogy.temperature=_tstof(strTmp1);header.Meteorogy.pressure=_tstof(strTmp2);header.Meteorogy.humidity=_tstof(strTmp3);elseif(strTmp0="AngleAccuracy")header.AngleAccuracy=_tstof(strTmp1);elseif(strTmp0="DistanceAccuracy")header.DistanceAccuracy.a=_tstof(s
37、trTmp1);header.DistanceAccuracy.b=_tstof(strTmp2);elseif(strTmp0="StationCount")header.StationCount=_ttoi(strTmp1);header.StationCoor=newControlPointDataheader.StationCount;elseif(strTmp0="StationName")/控制點坐標初始化for(inti=0;i<header.StationCount;i+)header.StationCoori.strName=st
38、rTmpi+1;header.StationCoori.X=0;header.StationCoori.Y=0;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine="Givendata")/讀取已知數(shù)據(jù)while(strLine!=_T("ENDGivendata")sf.ReadString(strLine);Obsdata+=strLine;Obsdata
39、+=_T("rn");' ,n1);if(strLine!=_T("ENDGivendata")strTmp=SplitString(strLine,elsebreak;if(strTmp0="Coor")KnownPointCount=_ttoi(strTmp1);KnownPoint=newControlPointDataKnownPointCount;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownPointCount;i+)sf.Re
40、adString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownPointi.strName=strTmp0;KnownPointi.X=_tstof(strTmp1);KnownPointi.Y=_tstof(strTmp2);if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;elseif(strTmp0="Dist")KnownDistCount=_ttoi(strTmp1
41、);KnownDist=newCDistObsKnownDistCount;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownDistCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownDisti.cpStart.strName=strTmp0;KnownDisti.cpEnd.strName=strTmp1;Kno
42、wnDisti.dDist=_tstof(strTmp2);if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;elseif(strTmp0="Angle")KnownBearingCount=_ttoi(strTmp1);KnownBearing=newCBearingObsKnownBearingCount;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownBearingCount;i+)sf.ReadString(strLine);Obsdata
43、+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);KnownBearingi.cpStation.strName=strTmp0;KnownBearingi.cpObject.strName=strTmp1;KnownBearingi.angleObsValue(DMS)=_tstof(strTmp2);if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;for(inti=0;i<KnownPointCount;i+)/將已知點數(shù)據(jù)傳到S
44、tationCoor中for(intj=0;j<header.StationCount;j+)if(KnownPointi.strName=header.StationCoorj.strName)header.StationCoorj.X=KnownPointi.X;header.StationCoorj.Y=KnownPointi.Y;sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine="Obsdata")/讀取觀測數(shù)據(jù)while(strLine!=_T(&qu
45、ot;ENDObsdata")sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");if(strLine!=_T("ENDObsdata")strTmp=SplitString(strLine,',',n1);elsebreak;if(strTmp0="Angle")ObsBearingCount=_ttoi(strTmp1);ObsBearing=newCBearingObsObsBearingCount;if(strTmp!=NULL)/釋放內(nèi)
46、存deletestrTmp;strTmp=NULL;for(inti=0;i<ObsBearingCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");strTmp=SplitString(strLine,',',n1);ObsBearingi.cpStation.strName=strTmp0;ObsBearingi.cpObject.strName=strTmp1;ObsBearingi.angleObsValue(DMS)=_tstof(strTmp2);if(str
47、Tmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;elseif(strTmp0="Dist")ObsDistCount=_ttoi(strTmp1);ObsDist=newCDistObsObsDistCount;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;for(inti=0;i<ObsDistCount;i+)sf.ReadString(strLine);Obsdata+=strLine;Obsdata+=_T("rn");,n1);strTmp=SplitStrin
48、g(strLine,','ObsDisti.cpStart.strName=strTmp0;ObsDisti.cpEnd.strName=strTmp1;ObsDisti.dDist=_tstof(strTmp2);if(strTmp!=NULL) / 釋放內(nèi)存deletestrTmp;strTmp=NULL;if(strTmp!=NULL)/釋放內(nèi)存deletestrTmp;strTmp=NULL;intfor count=0;(inti=0;i<ObsBearingCount;i+)if(ObsBearingi.angleObsValue(DMS)=0)count+=
49、1;header.OriAngleCount=count;/確定測站數(shù)sf.Close();/關閉文件UpdateData(FALSE);constdoublepi=3.1415926;doubleCControlnetAdjustmentDlg:Azimuth(doubleX1,doubleY1,doubleX2,doubleY2)/求方位角,返回弧度doubledx,dy;dx=X2-X1;dy=Y2-Y1+0.0001;return(pi-sgn(dy)*pi/2-atan(dx/dy);intCControlnetAdjustmentDlg:sgn(doubleX)/符號函數(shù)if(X&
50、gt;=0)return1;elsereturn-1;doubleCControlnetAdjustmentDlg:OutX(CStringstrName)/導出Xfor(inti=0;i<header.StationCount;i+)if(header.StationCoori.strName=strName)return(header.StationCoori.X);doubleCControlnetAdjustmentDlg:OutY(CStringstrName)/導出Yfor(inti=0;i<header.StationCount;i+)if(header.Statio
51、nCoori.strName=strName)return(header.StationCoori.Y);intCControlnetAdjustmentDlg:KnoworUnKnow(CStringstrName)/判斷一個控制點是否已知,已知返回,未知返回-1inta;for(inti=0;i<KnownPointCount;i+)if(KnownPointi.strName=strName)a=1;break;elsea=-1;returna;doubleCControlnetAdjustmentDlg:Max(CMatrixB,intm,intn)/求矩陣中最大值doublea
52、=0;for(inti=0;i<m;i+)for(intj=0;j<n;j+)if(fabs(B(i,j)>a)a=fabs(B(i,j);returna;doubleCControlnetAdjustmentDlg:XKnoworUnKnow()/求控制點坐標中是否還存在未知點,存在返回,不存在返回-1doublea;for(inti=0;i<header.StationCount;i+)if(header.StationCoori.X=0)a=1;break;elsea=-1;returna;voidCControlnetAdjustmentDlg:OnBnClic
53、kedRadio2()/坐標推算/TODO:在此添加控件通知處理程序代碼dofor(inti=0;i<header.StationCount;i+)if(header.StationCoori.X=0)for(intj=0;j<ObsBearingCount;j+)if(ObsBearingj.cpObject.strName=header.StationCoori.strName)&&(OutX(ObsBearingj.cpStation.strName)!=0)for(intk=0;k<ObsBearingCount;k+)if(ObsBearingk.c
54、pStation.strName=ObsBearingj.cpStation.strName)&&(OutX(ObsBearingk.cpObject.strName)!=0)doubleKnowAzi;KnowAzi=Azimuth(OutX(ObsBearingk.cpObject.strName),OutY(ObsBearingk.cpObject.strName),OutX(ObsBearingk.cpStation.strName),OutY(ObsBearingk.cpStation.strName);/返回弧度doublelangle;/左角langle=ObsBearingj.angleObsValue(RAD)-ObsBearingk.angleObsValue(RA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年春七年級地理下冊 第7章 第4節(jié) 俄羅斯教學實錄 (新版)新人教版
- 2024年春九年級歷史下冊 第三單元 第7課 世界反法西斯戰(zhàn)爭的轉折和勝利教學實錄 岳麓版
- DB3713-T 263-2022 游船碼頭設施與服務規(guī)范
- 10 土壤的種類(教學設計)-2023-2024學年三年級上冊科學 青島版
- 2024年春季九年級歷史下冊 第六單元 冷戰(zhàn)結束后的世界 第22課 不斷發(fā)展的現(xiàn)代社會教學實錄 新人教版
- 7《湯姆·索亞歷險記(節(jié)選)》(教學設計)-2023-2024學年統(tǒng)編版語文六年級下冊
- 7《開國大典》教學設計-2024-2025學年語文六年級上冊統(tǒng)編版
- 某住宅樓工程施工組織設
- 幼兒園建設項目可行性分析報告
- 2023三年級英語上冊 Fun Time 2 Recycle 2教學實錄 人教精通版(三起)
- DB43∕T 801-2013 二次張拉低回縮鋼絞線豎向預應力短索錨固體系設計、施工和驗收規(guī)范
- 附表1:網(wǎng)絡及信息安全自查表
- 奇妙的海洋生物
- 精裝修工程一戶一驗記錄表
- 公共場所健康證體檢表
- 普通高等學校獨立學院教育工作合格評估指標體系(第六稿)
- 哈薩克斯坦共和國有限責任公司和補充責任公司法
- 多維閱讀第13級—A Stolen Baby 小猩猩被偷走了
- 三愛三節(jié)-主題班會
- 2018版公路工程質量檢驗評定標準分項工程質量檢驗評定表交通安全設施
- (完整版)電機學第五版課后答案_(湯蘊璆)
評論
0/150
提交評論