2015中南大學(xué)測(cè)繪程序課程設(shè)計(jì)報(bào)告(含代碼界面設(shè)計(jì)數(shù)據(jù)格式)資料_第1頁(yè)
2015中南大學(xué)測(cè)繪程序課程設(shè)計(jì)報(bào)告(含代碼界面設(shè)計(jì)數(shù)據(jù)格式)資料_第2頁(yè)
2015中南大學(xué)測(cè)繪程序課程設(shè)計(jì)報(bào)告(含代碼界面設(shè)計(jì)數(shù)據(jù)格式)資料_第3頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中南大學(xué)測(cè)繪程序課程設(shè)計(jì)報(bào)告姓名:XXXXX 學(xué)號(hào):XXXXXX 指導(dǎo)老師:XXX 專業(yè)班級(jí):XXXX1系統(tǒng)設(shè)計(jì)1、實(shí)現(xiàn)功能1.1優(yōu)化設(shè)計(jì):根據(jù)控制網(wǎng)的觀測(cè)精度與網(wǎng)形,全面評(píng)定網(wǎng)的精度1.2數(shù)據(jù)輸入:使用外部數(shù)據(jù)倒入,通過讀取.txt格式觀測(cè)文件實(shí)現(xiàn)數(shù)據(jù)輸入1.3平差計(jì)算:對(duì)觀測(cè)數(shù)據(jù)進(jìn)行精密平差計(jì)算,得到平差后的點(diǎn)位坐標(biāo),方向 觀測(cè)值,邊長(zhǎng)觀測(cè)值等,精度評(píng)定,并彈出文本框輸出成果。1.4畫圖:控制網(wǎng)圖形輸出,繪制誤差橢圓,以及平差結(jié)果導(dǎo)出到 txt文 件中。2、系統(tǒng)總體框架導(dǎo)線網(wǎng)平差系統(tǒng)數(shù)據(jù)輸入:界面設(shè)計(jì)2.1數(shù)據(jù)輸入2.1.1文件格式:2 (已知點(diǎn)數(shù)據(jù)個(gè)數(shù))1,31250.2500,1150

2、0.4100(已知點(diǎn)數(shù)據(jù))2,33256.5700,10900.84003 (未知點(diǎn)數(shù)據(jù)個(gè)數(shù))3,4, (未知點(diǎn)數(shù)據(jù))5,8 (距離觀測(cè)數(shù)據(jù)個(gè)數(shù))1,3,2300.06001,4,3090.35302,5,3643.23402,3,2115.9190距離觀測(cè)數(shù)據(jù))2,4,4363.61103,5,2169.07303,4,2620.90904,5,3922.860018(方向觀測(cè)數(shù)據(jù)個(gè)數(shù))1,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.53

3、3944 (方向觀測(cè)數(shù)據(jù))3,4,282.2953834,1,04,2,26.0954124,3,46.3617984,5,77.5946715,4,05,3,39.0017795,2,70.1951512.1.2數(shù)據(jù)輸入實(shí)現(xiàn):(1) 創(chuàng)建角度類#pragma once/枚舉數(shù)據(jù)類型,用于代表角度形式enumAngleStyleDEG,DMS,RAD;class CAnglepublic :CAngle( double value=0,AngleStyle style=DMS);CAngle( void );private :double dValue; / 角度值A(chǔ)ngleStyle nCu

4、rStyle; / 當(dāng)前角度值類型private :/設(shè)置常成員函數(shù)的作用:.類成員不會(huì)被改變2.可以被常類變量調(diào)用double Deg( double dDms) const ;double Dms(double dDeg) const ;public :/獲取指定的類型獲取角度值,/由于返回的是dValue的引用,所以該值大小可以改變,即可以進(jìn)行賦值double & operator () (AngleStyle style);/重載,獲取指定的類型獲取角度值,該值不可改變,const CAngle類型變量調(diào)用double operator () (AngleStyle style

5、)const ;/重載運(yùn)算符+/-friend CAngle operator + ( const CAngle& m1, const CAngle& m2);friend CAngle operator - ( const CAngle& m1, const CAngle& m2);(2) 創(chuàng)建點(diǎn)類用于存取點(diǎn)的信息,如坐標(biāo)、點(diǎn)號(hào)、橢圓函數(shù)#pragma onceclass CControlPoint / 控制點(diǎn)public :CControlPoint();CControlPoint();double X;double Y;CString strPointID

6、; 點(diǎn)號(hào)int state;int flg; /判斷測(cè)站點(diǎn)是否相同用double dE;double dF;double dQ; /橢圓函數(shù)double dMx;double dMy;double dMk; /矩陣計(jì)算;(3) 創(chuàng)建距離類用于存取距離觀測(cè)信息,如測(cè)站方向點(diǎn)、觀測(cè)方向點(diǎn)、距離觀 測(cè)值#pragma once#include "ControlPoint.h"#include "Angle.h"class CDistObs /距離觀測(cè)值public :CDistObs();CDistObs();public :CControlPoint *cp

7、Start,*cpEnd;/ 測(cè)站與照準(zhǔn)點(diǎn)double dDist; /距離觀測(cè)值;(4) 創(chuàng)建方向類用于存取方向觀測(cè)信息,如測(cè)站方向點(diǎn)、照準(zhǔn)方向點(diǎn)、方向觀 測(cè)值#pragma once#include "ControlPoint.h"#include "Angle.h" class CAngleObs/ 方向觀測(cè)值public :CAngleObs();CAngleObs();public :CControlPoint *cpStation; / 起始點(diǎn)CControlPoint *cpEnd; 照準(zhǔn)點(diǎn)CAngle ObsAngle; / 方向觀測(cè)值;

8、(4)讀取文件函數(shù):bool LoadObsData(const CString &strFileName,CString &screen);,此函數(shù)功能為通過傳入的文件名 strFileName進(jìn)行文件讀寫,并將 信息存到相應(yīng)成員數(shù)據(jù)中。2.2近似坐標(biāo)推算2.2.1近似坐標(biāo)計(jì)算原理 按方向和邊長(zhǎng)觀測(cè)值計(jì)算導(dǎo)線網(wǎng)中待定點(diǎn)的近似坐標(biāo)十y ya d sint 二 yaA)d sin© A)2.2.2具體實(shí)現(xiàn)(1)坐標(biāo)概算函數(shù):void CoordinateEstimates();,函數(shù)設(shè)計(jì)思路:設(shè)計(jì)一個(gè)循環(huán) 如果沒有讀取數(shù)據(jù)則返回。然后通過創(chuàng)建一個(gè)bool類型的函數(shù) ls

9、Coordi nateEstimate來判斷有沒有計(jì)算過坐標(biāo)的近似值,防止其陷入死循環(huán)。然后開始用迭代:首先判斷測(cè)站點(diǎn)是否已知點(diǎn),然后再判斷測(cè)站點(diǎn)相同的情況下 找到照準(zhǔn)點(diǎn)近似坐標(biāo)未算出的照準(zhǔn)點(diǎn)(有方向觀測(cè)值,這樣才可以通過極坐標(biāo)法 計(jì)算出近似值),然后 根據(jù)近似坐標(biāo)計(jì)算原理計(jì)算方向觀測(cè)j (條件循環(huán)的時(shí)候 定義兩個(gè)參數(shù)i ,j )的觀測(cè)方向近似坐標(biāo),需要注意的是,在近似坐標(biāo)推算中, 循環(huán)計(jì)算一次之后,必須判斷是否所有未知點(diǎn)的近似坐標(biāo)已經(jīng)推算出來,沒有的話再進(jìn)行循環(huán)計(jì)算。(這樣做主要是為了防止在節(jié)點(diǎn)控制網(wǎng)中,當(dāng)未知點(diǎn)很多時(shí),可能推算到一個(gè)點(diǎn)之后,它所連得所有控制點(diǎn)均為坐標(biāo)未知點(diǎn), 這樣在一次循環(huán)

10、 中就會(huì)跳過這個(gè)控制點(diǎn),這個(gè)點(diǎn)的近似坐標(biāo)就沒有計(jì)算出來。而在下一次循環(huán)中, 它所連得控制點(diǎn)中就會(huì)有坐標(biāo)已知點(diǎn),這樣這個(gè)點(diǎn)的近似坐標(biāo)就計(jì)算出來了) 。(2) 計(jì)算流程圖:計(jì)算 m_pAngleObs中第i個(gè)的觀測(cè)方向點(diǎn)近似坐標(biāo)再次從i=0循環(huán) 否所有未知點(diǎn)的近似坐標(biāo)是否 已經(jīng)推算出來近似坐標(biāo)推算計(jì) 算完畢2.3平差計(jì)算2.3.1平差計(jì)算原理設(shè):觀測(cè)值為L(zhǎng),其權(quán)為P,相應(yīng)的改正數(shù)為V,必要觀測(cè)值個(gè)數(shù)為t,選定未 知數(shù)X,則有誤差方程V = BX根據(jù)最小二乘原理:V T PVBX Lmin,求極值,BTPV = 0,BTP(BX + L)= 0, BTPBX + BtPL= 0,得:法方程:BtPB

11、X btpl 二 0法方程的解:X = -(btpb)°btpl單位權(quán)中誤差:VTPV /(n - t)2.3.2間接平差流程(1) 列出誤差方程及條件式(2) 定權(quán)(3) 組成法方程(4) 解算法方程,求得 dX=dx1 dy1 dx2 dy2(5) 平差后的坐標(biāo)值計(jì)算X=X+dX(6) 精度評(píng)定,計(jì)算誤差橢圓參數(shù)等2.3.3誤差方程的列立以未知點(diǎn)坐標(biāo)為平差對(duì)象,一個(gè)觀測(cè)值對(duì)應(yīng)一個(gè)誤差方程式,誤差方程式包括兩類:方向觀測(cè)誤差方程式和邊長(zhǎng)觀測(cè)誤差方程式(1)方向觀測(cè)誤差方程式般形式:Vj Zi + az + jY - ai*Xj - jYj + lj 其中:'' 0

12、''p sinTjjp coshaj 二D0, bij 'Dij般取測(cè)站起始方向(零方向)" 0ijDj的近似坐標(biāo)方位角作為定向角近似值lj Zi0+Tj0- Lj-乙0Tj0當(dāng)測(cè)站點(diǎn) 當(dāng)照準(zhǔn)點(diǎn)Yj0 二 arctg.oi為已知點(diǎn)時(shí): j為已知點(diǎn)時(shí):- Y0Xi0V廠Vj =當(dāng)側(cè)站點(diǎn)和照準(zhǔn)點(diǎn)都為已知點(diǎn)時(shí):(2)邊長(zhǎng)觀測(cè)誤差方程式乙-a/Xj - jYj + lj r乙 + afXi + jY + ljV = - Z li-ijiijVj-cost, Xj -二 Sj0 -sin TY + cosTXj + si nTYj + lijI 1 jS0當(dāng)測(cè)站點(diǎn)i為已

13、知點(diǎn)時(shí):Vij 當(dāng)照準(zhǔn)點(diǎn)j為已知點(diǎn)時(shí):、/Vj為近似坐標(biāo)計(jì)算而得,Sij為實(shí)測(cè)邊長(zhǎng)=cosTXj + sinT賞Yj 十 hj -cosTjXj - sinTjY + hj234定權(quán)(1)方向觀測(cè)值的權(quán)在等精度方向觀測(cè)的控制網(wǎng)中,一般把方向觀測(cè)值的權(quán)定為1(2)邊長(zhǎng)觀測(cè)值的權(quán)Ps其中Ms由對(duì)話框輸入235平差后的坐標(biāo)值計(jì)算求得平差后的坐標(biāo)值X=X+dX。因?yàn)橹挥衐x很小時(shí)誤差方程式、條件方程 式才是嚴(yán)密的,因此當(dāng)dX的值較大時(shí)應(yīng)把X=X_+dX作為新的近似值重復(fù)上述 步驟,直到dx中絕對(duì)值最大的一個(gè)小于給定的 0.1mm (注意:這里只是指坐標(biāo) 改正值,不包括定向改正值,所以在求 dx中絕對(duì)值

14、最大值時(shí),應(yīng)除去定向改正 值,否則會(huì)無限迭代計(jì)算,因?yàn)槎ㄏ蚋恼岛艽?,而且迭代?jì)算時(shí)不會(huì)進(jìn)行改正) 2.3.6精度評(píng)定T(1)中誤差計(jì)算:0=±jV PV ,n為觀測(cè)值個(gè)數(shù),t為未知數(shù)個(gè)數(shù)n -t(2)待定點(diǎn)點(diǎn)位誤差:mx =: m。. Qxx,my =: m°. Qyymk = 土m。+ m:(3) 誤差橢圓元素計(jì)算: 2Q長(zhǎng)半徑方位角q J arctg旦2Qxx - Qyy長(zhǎng)半徑、短半徑m0;Qxx QxytgQ,E 二 m。Qxx Qxytg(Q 90。)238具體實(shí)現(xiàn)(1 ) void ComAngleObsEf(CAngleObs AngleObs, double

15、 & Fi, double & Ci, double & Di, double & Ck,double & Dk);,此函數(shù)功能為計(jì)算出 AngleObs 的系 數(shù) Fi、Ci、Di、Ck;(2) void ComDistObsEff(CDistObs DistObs, double & Fi, double & Ci, double & Di, double & Ck, double & Dk);,此函數(shù)功能為計(jì)算出 DistObs 的系數(shù) Fi、Ci、 Di、Ck;(3) void FormErrorEquat

16、ions(CMatrix& B,CMatrix& f),此函數(shù)功能為組建法 方程系數(shù)矩陣B,常數(shù)項(xiàng)矩陣f ; void FixedWeight(CMatrix &p),此函數(shù)功能為 計(jì)算權(quán)矩陣p;(4) void FormErrorEquations(CMatrix&B,CMatrix& f),此函數(shù)功能為平差計(jì)算、點(diǎn)位精度計(jì)算2.成果輸出(1) 平差結(jié)果的輸出,主要是輸出方向觀測(cè)成果表、距離觀測(cè)成果表、精度評(píng)定以及控制點(diǎn)成果表這四方面內(nèi)容,對(duì)于這部分的輸出比較容易實(shí)現(xiàn),只要建立Cstring對(duì)象,調(diào)用庫(kù)函數(shù).format()來定義輸出格式,來進(jìn)行格式化

17、輸出,就 很容易實(shí)現(xiàn)。在對(duì)話框?qū)?yīng)的計(jì)算按鈕添加代碼部分獲得文件名strFileName,調(diào)用 void CalculateErrorEquations(const CString &strFileName) 。(2) 圖形繪制,對(duì)話框添加畫圖控件,在對(duì)話框?qū)?yīng)的畫圖按鈕添加代碼獲得picture 控件的CDC和大小,調(diào)用控制網(wǎng) ControlNetAdjust中成員函數(shù)voidErrorEllipseDraw(CDC* pDC,CRect & rect)進(jìn)行繪圖。2程序設(shè)計(jì)計(jì)劃與進(jìn)度表厶口、宀缶出六編號(hào):完成內(nèi)容:日期:1進(jìn)行程序設(shè)計(jì)與安排進(jìn)度表7.1 7.22設(shè)定數(shù)據(jù)格式與

18、實(shí)現(xiàn)讀取數(shù)據(jù)功能7.33近似坐標(biāo)的推算747.54平差計(jì)算并進(jìn)行成果輸出7.6 7.85控制網(wǎng)網(wǎng)形、誤差橢圓的繪制7.86代碼修改、程序整改、修飾工作、調(diào)試7.8-7.97實(shí)驗(yàn)報(bào)告的編寫7.103設(shè)計(jì)心得3.1程序設(shè)計(jì)過程中遇到問題及解決方法3.1.1系統(tǒng)的設(shè)計(jì):需要實(shí)現(xiàn)什么功能,怎么實(shí)現(xiàn)。通過一步步地剖析實(shí)驗(yàn)指導(dǎo) 書里面的流程圖,然后列出需求分析,最后得出初步設(shè)計(jì)思路。3.1.2數(shù)據(jù)文件的讀?。豪蠋熃o的指導(dǎo)書里面的數(shù)據(jù)是分開的,我們要做的不僅 是讀數(shù)據(jù)重點(diǎn)是怎么讀。通過參考了第8個(gè)實(shí)驗(yàn)讀取數(shù)據(jù)的格式,對(duì)比指導(dǎo)書的數(shù)據(jù),設(shè)計(jì)出來了自己的數(shù)據(jù)格式。3.1.3坐標(biāo)概算時(shí):坐標(biāo)概算有三種方法,根據(jù)指

19、導(dǎo)書和老師的講解,我們?nèi)∮?的第三種極坐標(biāo)算法。參考書里的代碼。編寫后會(huì)發(fā)現(xiàn)書里面定義的很多變量跟 自己不一致,需要更改,并且書里面概算的過程中調(diào)用的一些函數(shù)(比如方位角Azi()計(jì)算和SearchDist()需要自己編寫。需要注意的是編寫的這兩個(gè)函數(shù)的形 參要與概算函數(shù)里面創(chuàng)建的參數(shù)類型要一致,這需要好好注意。3.1.4組成法方程,計(jì)算B,F矩陣:同樣參考書里面代碼,因?yàn)闀锩娑x前后 不一樣,所以不能直接搬用。所以需要理解B矩陣是怎么構(gòu)成的。通過查看書本和指導(dǎo)書得出B矩陣行為觀測(cè)值(方向與角度)個(gè)數(shù),列為未知點(diǎn)參數(shù)( X, 丫)與測(cè)站點(diǎn)個(gè)數(shù)構(gòu)成,同樣理解 F矩陣。而且,書本里面定向方位角近

20、似的函 數(shù)也要自己編寫。3.1.5組成法方程時(shí),常數(shù)項(xiàng)矩陣f數(shù)值過大,分別在函數(shù) ComAngleObsEff(ClzAngleObs AngleObs , double& Fi, double& Ci, double& Di, double& Ck, double& Dk)和 ComDistObsEff(ClzDistObs DistObs, double& Fi, double & Ci, double & Di, double & Ck, double & Dk) 中設(shè)置斷點(diǎn),經(jīng)手算各方向觀 測(cè)系數(shù)和距離觀測(cè)

21、系數(shù)后與監(jiān)視值對(duì)比發(fā)現(xiàn)兩個(gè)問題,第一個(gè)是在求解測(cè)站零方 向的近似方位角時(shí),隨著測(cè)站的變化,零方向的近似方位角沒有作對(duì)應(yīng)變化;第二個(gè)問題是方向觀測(cè)的常數(shù)Fi由于角度類對(duì)象和double轉(zhuǎn)換不統(tǒng)一出現(xiàn)問題。 經(jīng)過改正后通過,與手算誤差符合。3.1.6平差計(jì)算時(shí),由于是參考第 8個(gè)實(shí)驗(yàn)計(jì)算輸出的代碼,這一次輸出的成果 要比上一次多所以在對(duì)比和計(jì)劃的時(shí)候弄了不斷時(shí)間,主要是輸出f的時(shí)候一定要注意單位,要回去檢查f矩陣的計(jì)算和單位的換算,設(shè)置斷點(diǎn)逐語(yǔ)句地查看監(jiān) 視結(jié)果。3.2程序設(shè)計(jì)感想這一次的課程設(shè)計(jì)跟以往做的八個(gè)實(shí)驗(yàn)都不一樣,它可以說八個(gè)實(shí)驗(yàn)的集合并且要超過以往八個(gè)實(shí)驗(yàn)的總和。一開始做的時(shí)候感覺無從

22、下手,因?yàn)檫@個(gè)程序需要實(shí)現(xiàn)讀取數(shù)據(jù),計(jì)算,繪圖,輸出。而計(jì)算里面也分為概算,組成法方程,平差。首先是數(shù)據(jù)讀取,一開始拿到課程設(shè)計(jì)指導(dǎo)書看到數(shù)據(jù)的時(shí)候腦子浮現(xiàn)的是:這是什么?因?yàn)橹笇?dǎo)書里面的數(shù)據(jù)是分開的,不像做好了格式很清晰明了地排列在一個(gè)文檔中??磾?shù)據(jù)的時(shí)候我需要搞懂這是什么數(shù)據(jù),怎么測(cè)量的,然后再設(shè)計(jì)數(shù)據(jù)的排列方式再設(shè)計(jì)出如何讀 取數(shù)據(jù)。在這個(gè)過程中,我更深入地掌握了讀取文件的方式和方法與 格式,以前一些不懂的地方也通過多次調(diào)試弄得清楚明白。繼而開始編寫概算的代碼。在老師講解中,我們需要采用的是極坐 標(biāo)法,這個(gè)方法要比前兩種要簡(jiǎn)單,適用性更強(qiáng)??戳酥笇?dǎo)書和書本 之后,我決定采用書里面概算的代

23、碼。書里面的代碼是采用循環(huán)迭代 來計(jì)算,有一些書里定義的函數(shù)需要自己弄清楚參數(shù)和函數(shù)類型,然 后再自己編寫這個(gè)函數(shù)的功能的。所以需求仔細(xì)看書代碼的意思然后 才能編寫出某個(gè)需自定義的函數(shù)。 通過編寫了概算的函數(shù),我更深入 地掌握了迭代循環(huán)的用法和理解了極坐標(biāo)法計(jì)算近似坐標(biāo)的方法。然后編寫平差計(jì)算的代碼。首先是組成誤差方程,那么就需要B和I矩陣,同樣的我也是參考書里面的代碼。一開始看不懂書里面的 變量,因?yàn)闀镒兞慷x沒有說明并且跟自身定義的差別太大。需要我一行行甚至是手寫和請(qǐng)教老師和同學(xué)才知道究竟表達(dá)的是什么。由于有編寫概算的經(jīng)驗(yàn),這一次編寫比較順利。然后開始編寫定權(quán)和誤 差計(jì)算的代碼了,我參考

24、了第八個(gè)實(shí)驗(yàn)的代碼。輸出和計(jì)算出平差的 成果。在調(diào)試的時(shí)候出現(xiàn)多次錯(cuò)誤有很多是循環(huán)提前了或則沒有設(shè)置 循環(huán)所以在計(jì)算的時(shí)候就會(huì)中斷而不能繼續(xù), 通過設(shè)置了很多個(gè)斷點(diǎn) 逐語(yǔ)句進(jìn)行監(jiān)視看每個(gè)變量的值, 再對(duì)比指導(dǎo)書里面的成果。成功調(diào) 試后發(fā)現(xiàn)了 X和Y的后面的成果小數(shù)點(diǎn)后2位跟指導(dǎo)書成果有一點(diǎn) 點(diǎn)誤差,經(jīng)過檢查還是無法改正出指導(dǎo)書一樣的結(jié)果。最后一步是繪圖,繪圖的代碼不是全部自己編寫的,但是我將繪圖 代碼的一些重點(diǎn)語(yǔ)句看懂了,比如那個(gè)是定義畫筆,顏色,比例等等。在編寫了程序并成功運(yùn)行并輸出后,其實(shí)有很多地方還是甚不了解 的。我反反復(fù)復(fù)地看自己的程序代碼,一句一句地看這代碼是怎樣實(shí)現(xiàn)的,為什么這樣做

25、。加深了一點(diǎn)了解。但是在答辯的時(shí)候,我發(fā)現(xiàn) 了我對(duì)B矩陣和x改正數(shù)矩陣并不完全了解,它們之間的聯(lián)系并沒 有讓我深入發(fā)掘出來。答辯之后我深思了一下,再查看了一下程序, 頓時(shí)之前查看代碼的一部分部分慢慢結(jié)合成了一塊。讓我發(fā)現(xiàn)了原來答辯不僅僅是單單的檢驗(yàn)自己的程序和自己是否自己編寫的,更是一一個(gè)讓自身更加深入地,全面地回顧自己這兩個(gè)星期以來的點(diǎn)點(diǎn)滴滴, 將他們結(jié)合起來機(jī)會(huì)。在這一次課程設(shè)計(jì)中,我受益匪淺。它將之前八個(gè)C+實(shí)驗(yàn)有機(jī)地統(tǒng)合在了一起并且升華。在比以往都龐大的一個(gè)程序調(diào)試的過程中未 免會(huì)出現(xiàn)很多的錯(cuò)誤,有時(shí)候甚至高達(dá)幾百個(gè)。以前我一個(gè)一個(gè)個(gè)找 錯(cuò)誤找到自己認(rèn)為容易改的開始改起,如今我懂得了錯(cuò)

26、誤要從第一個(gè) 改起,因?yàn)橛袝r(shí)候下面很多錯(cuò)誤也許就是因?yàn)樽钌厦嬉粋€(gè)少加了,或者;而引起的。不僅如此,以前一些不從下手需要請(qǐng)教老師的錯(cuò)誤現(xiàn) 在見識(shí)多了,比較容易就知道了出現(xiàn)這種錯(cuò)誤一般是哪里打錯(cuò)了或則 哪里少了聲明等等。以往還不很會(huì)設(shè)置斷點(diǎn)和理解斷點(diǎn)的作用,現(xiàn)在 懂得了再調(diào)試后可以通過斷點(diǎn)一步步對(duì)比參數(shù)更加容易地發(fā)現(xiàn)到底 是哪里出現(xiàn)了問題并加以改正。 感謝這一次機(jī)會(huì),讓我學(xué)到了這么東 西,我會(huì)繼續(xù)努力更加認(rèn)真地學(xué)習(xí)下去!4代碼(1)ControlPoint 頭文件#pragma once class CControlPoint / 控制點(diǎn)public :CControlPoint();CContr

27、olPoint();double X;double Y;CString strPointID; 點(diǎn)號(hào)int state;int flg; /判斷測(cè)站點(diǎn)是否相同用double dE;double dF;double dQ; /橢圓函數(shù)double dMx;double dMy;double dMk; /矩陣計(jì)算;Co ntrolPoi nt源文件#include "StdAfx.h"#include "ControlPoint.h"CControlPoint:CControlPoint() / 初始化 X=0;Y=0;strPointID = _T(&qu

28、ot;");flg=0;state=0;dE=0;dF=0;dQ=0;dMx=0;dMy=0;dMk=0;CControlPoint:CControlPoint()DistObs頭文件#pragma once#include "ControlPoint.h"#include "Angle.h"class CDistObs /距離觀測(cè)值public :CDistObs();CDistObs();public :CControlPoint *cpStart,*cpEnd;/ 測(cè)站與照準(zhǔn)點(diǎn)double dDist; /距離觀測(cè)值;DistObs源文件

29、#include "StdAfx.h"#include "DistObs.h"CDistObs:CDistObs( void )dDist=0;cpStart=NULL; cpEnd=NULL;CDistObs:CDistObs( void )cpStart=NULL; cpEnd=NULL;An gleObs頭文件#pragma once#include "ControlPoint.h"#include "Angle.h"class CAngleObs/ 方向觀測(cè)值public :CAngleObs();CAng

30、leObs();public :CControlPoint *cpStation; / 起始點(diǎn)CControlPoint *cpEnd; 照準(zhǔn)點(diǎn)CAngle ObsAngle; / 方向觀測(cè)值;An gleObs源 文件#include "StdAfx.h"#include "AngleObs.h"CAngleObs:CAngleObs( void )cpStation=NULL;cpEnd = NULL;ObsAngle = 0;CAngleObs:CAngleObs( void )(4) C on trolNetAdjust頭文件#pragma on

31、ce#include "ControlPoint.h"#include "AngleObs.h"#include "DistObs.h"#include "Matrix.h"#include "Angle.h"const double Anglesigma=5;const double Distsigma = 0.5;class CControlNetAdjustpublic :CControlNetAdjust(); CControlNetAdjust();private :CControlP

32、oint *m_pUnknowPoint; int m_iUnknowPointCount;CControlPoint *m_pKnowPoint; int m_iKnowPointCount;CAngleObs *m_pAngleObs;int m_iAngleObsCount;CDistObs *m_pDistObs;int m_iDistObsCount;public :int m_iStationCount;bool LoadObsData( const CString &strFileName,CString &screen);void CoordinateEstim

33、ates();void SetStationCount();/計(jì)算誤差方程/分割函數(shù)void CalculateErrorEquations( const CString& strFileName);void ErrorEllipseDraw(CDC* pDC,CRect& rect);/ 畫圖private :CString* SplitString(CString str,char split, int iSubStrs);void SetUnknowPointSize( int size); / 設(shè)置未知點(diǎn)數(shù)組大小void SetKnowPointSize( int si

34、ze); / 設(shè)置已知點(diǎn)數(shù)組大小void SetAngleObsSize( int size); /設(shè)置方向觀測(cè)值數(shù)組大小void SetDistObsSize( int size); /設(shè)置距離觀測(cè)值數(shù)組大小CControlPoint* SearchKnownPointUsinglD(CString strID);CControlPoint* SearchUnknownPointUsinglD(CString strID);CControlPoint* SearchPointUsinglD(CString strPointID);CAngle Azimuth( double dX1, dou

35、ble My1, double dx2, double My2); / 求方位角double HDist(CControlPoint* cpStation1,CControlPoint* cpEnd1);/ 兩控制點(diǎn)距離CAngle ZeroAngle(CAngleObs AngleObs); / 定位方向角void ComAngleObsEff(CAngleObs AngleObs, double & Fi, double & Ci, double & Di, double & Ck,double & Dk);void ComDistObsEff(CD

36、istObs DistObs, double & Fi, double & Ci, double & Di, double & Ck, double & Dk);void FixedWeight(CMatrix &p);/ 定權(quán)void OutMatrixToFile( const CMatrix& mat,CStdioFile& SF); / 將矩陣輸出到文件void GetMaxXY( double & dx, double & dy, double & minx, double &maxy);

37、 / 獲取最大值void FormErrorEquations(CMatrix& B,CMatrix& f);/ 組成誤差方程;ClzCo ntrolNetAdjust 源文件#include "StdAfx.h"#include "ControlNetAdjust.h"#include <locale.h>#include "math.h"const double PI=atan(1.0)*4.0;const double EPSILON= 1.0E-12;const double R0=206265;C

38、ControlNetAdjust:CControlNetAdjust()m_pUnknowPoint=NULL;mUnknowPointCount=0;m_pKnowPoint=NULL;m_iKnowPointCount=0;m_pAngleObs=NULL;m_iAngleObsCount=0;m_pDistObs=NULL;m_iDistObsCount=0;m_iStationCount=0;CControlNetAdjust:CControlNetAdjust()delete m_pUnknowPoint;m_pUnknowPoint=NULL;delete m_pKnowPoint

39、;m_pKnowPoint=NULL;delete m_pAngleObs;m_pAngleObs=NULL;delete m_pDistObs;m_pDistObs=NULL;void CControlNetAdjust:SetKnowPointSize( int size) / 設(shè)置已知點(diǎn)數(shù)組大小if (m_pKnowPoint!=NULL)delete m_pKnowPoint;m_pKnowPoint= NULL;m_iKnowPointCount=O;mKnowPointCount=size;m_pKnowPoint = new CControlPointsize;void CCon

40、trolNetAdjust:SetUnknowPointSize( int size) / 設(shè)置未知點(diǎn)數(shù)組大小if (m_pUnknowPoint!= NULL)delete m_pUnknowPoint;m_pUnknowPoint=NULL;mUnknowPointCount=0;m_iUnknowPointCount = size;m_pUnknowPoint= new CControlPointsize;void CControlNetAdjust:SetAngleObsSize( int size) / 設(shè)置方向觀測(cè)值數(shù)組大小if (m_pAngleObs!=NULL)delete

41、m_pAngleObs;m_pAngleObs= NULL;m_iAngleObsCount=0;m_iAngleObsCount=size;m_pAngleObs= newCAngleObssize;if (m_pDistObs!=NULL)delete m_pDistObs; m_pDistObs=NULL; m_iDistObsCount=0;mDistObsCount=size; m_pDistObs= new CDistObssize;CControlPoint* CControlNetAdjust:SearchKnownPointUsinglD(CString strID)組中找到

42、控制點(diǎn),并返回該點(diǎn)的指針for (int i=0;i<m_iKnowPointCount;i+)if (strID = m_pKnowPointi.ptlD)return &m _pKnowPointi;return NULL;CControlPoint* CControlNetAdjust:SearchUnknownPointUsinglD(CString strID) 數(shù)組中找到控制點(diǎn),并返回該點(diǎn)的指針for (int i =0;i<m_iUnknowPointCount;i+)if (strID = m_pUnknowPointi.ptlD)return &m

43、 _pUnknowPointi;return NULL;CControlPoint* CControlNetAdjust:SearchPointUsinglD(CString ptID)數(shù)組中找到控制點(diǎn),并返回該點(diǎn)的指針/根據(jù)點(diǎn)號(hào)從已知點(diǎn)數(shù)/根據(jù)點(diǎn)號(hào)從未知點(diǎn)/根據(jù)點(diǎn)號(hào)從未知點(diǎn)和已知點(diǎn)CControlPoint* pCP=NULL;pCP= SearchKnownPointUsinglD(ptlD);if (pCP=NULL)pCP= SearchUnknownPointUsinglD(ptlD);return pCP;/分割函數(shù)CString* CControlNetAdjust:SplitS

44、tring(CString str,char split, int iSubStrs)int iPos = 0;/分割符位置int iNums = 0;/分割符的總數(shù)CString strTemp = str;CString strRight;/先計(jì)算子字符串的數(shù)量while (iPos != -1)iPos = strTemp.Find(split);if (iPos = -1)break;strRight = strTemp.Mid(iPos + 1, str.GetLength();strTemp = strRight;iNums+;if (iNums = 0)/沒有找到分割符/子字符串

45、數(shù)就是字符串本身iSubStrs = 1;return NULL;/子字符串?dāng)?shù)組iSubStrs = iNums + 1;/子串的數(shù)量=分割符數(shù)量+ 1CString* pStrSplit;pStrSplit = new CStringiSubStrs;strTemp = str;CString strLeft;for ( int i = 0; i < iNums; i+)iPos = strTemp.Find(split);/左子串strLeft = strTemp.Left(iPos);/右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetL

46、ength();strTemp = strRight;pStrSpliti = strLeft;pStrSplitiNums = strTemp;return pStrSplit;void CControlNetAdjust:SetStationCount()m_iStationCount=mKnowPointCount+mUnknowPointCount;/讀取數(shù)據(jù)bool CControlNetAdjust:LoadObsData( const CString &strFileName,CString &screen)CStdioFile gjj;if (!gjj.Open

47、(strFileName,CFile:modeRead)return false ;CString strLine;/讀取已知數(shù)據(jù)gjj.ReadString(strLine);SetKnowPointSize(_ttoi(strLine);screen+=strLine;screen+=_T( "rn");int n=0;for (int i=O;i<m_iKnowPointCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");CString* pstrData=Sp

48、litString(strLine,',' ,n);m_pKnowPointi.ptlD=pstrDataO;m_pKnowPointi.X=_tstof(pstrData1);m_pKnowPointi.Y=_tstof(pstrData2);m_pKnowPointi.state=1;m_pKnowPointi.flg=1;delete pstrData;pstrData=NULL;/讀取未知點(diǎn)數(shù)據(jù)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");SetUnknowPointSize(_t

49、toi(strLine);for (int i=O;i<m_iUnknowPointCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");/CString* pstrData=SplitString(strLine,',',n);m_pUnknowPointi.ptlD=strLine0; m_pUnknowPointi.state=2;m_pUnknowPointi.flg=2;/讀取距離觀測(cè)數(shù)據(jù)gjj.ReadString(strLine);screen+=strLin

50、e;screen+=_T( "rn");SetDistObsSize(_ttoi(strLine);for (int i=0;i<m_iDistObsCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");CString* pstrData=SplitString(strLine,',' ,n);m_pDistObsi.cpStart=SearchPointUsinglD(pstrData0); m_pDistObsi.cpEnd=SearchPointU

51、singlD(pstrData1); m_pDistObsi.dDist=_tstof(pstrData2);delete pstrData; pstrData=NULL;/讀取方向觀測(cè)值數(shù)據(jù)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");SetAngleObsSize(_ttoi(strLine);for (int i=0;i<m_iAngleObsCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn")

52、;CString* pstrData=SplitString(strLine,',' ,n);m_pAngleObsi.cpStation=SearchPointUsinglD(pstrData0); m_pAngleObsi.cpEnd=SearchPointUsinglD(pstrData1); m_pAngleObsi.ObsAngle=CAngle(_tstof(pstrData2),DMS); delete pstrData;pstrData=NULL;gjj.Close();return true ;/方位角計(jì)算CAngle CControlNetAdjust:Az

53、imuth( double dX1, double dY1, double dX2, double dY2) CAngle A;int sgn;if (dY2-dY1+EPSILON>=0)sgn=1;else sgn=-1;A(RAD)=PI-sgn*PI/2-atan(dX2-dX1)/(dY2-dY1+EPSILON);return A;/兩控制點(diǎn)距離函數(shù)double CControlNetAdjust:HDist(CControlPoint *cpStation1, CControlPoint *cpEnd1)double dDist;dDist= sqrt(cpStation1

54、->X-cpEnd1->X)*(cpStation1->X-cpEnd1->X)+(cpStation1->Y-cpEnd1->Y)*(cpStatio n1->Y-cpEnd1->Y);return dDist;/坐標(biāo)概算void CControlNetAdjust:CoordinateEstimates()if (m_iKnowPointCount=0 |m_iAngleObsCount =0 |m_iDistObsCount=0|m_iUnknowPointCount=0) / 未讀取數(shù)據(jù)則返回return ;int iCount=0;in

55、t lsCoordinateEstimate=0;if (lsCoordinateEstimate=0) /判斷有沒有計(jì)算過近似坐標(biāo)dofor (int i=0;i<m_iAngleObsCount;i+)if (m_pAngleObsi.cpStation->state=1 &&m_pAngleObsi.cpEnd->state=1)for (int j=0;j<m_iAngleObsCount;j+)if (m_pAngleObsj.cpStation->ptlD=m_pAngleObsi.cpStation->ptlD&&m _pAngleObsj.cpEnd->state=2)CAngleARF=m_pAngleObsj.ObsAngle-m_pAngleObsi.ObsAngle; / 方向值之差CAngleARF0=Azimuth(m_pAngleObsi.cpStation->X,m_pAngleObsi.cpStation->Y, m_pAngleObsi.cp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論