




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《測(cè)繪程序設(shè)計(jì)〔VC.net〕》上機(jī)實(shí)驗(yàn)報(bào)告〔VisualC++.Net〕班級(jí):學(xué)號(hào):姓名:序號(hào):二零一零年三月實(shí)驗(yàn)2控制結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康恼莆誚C++.net語(yǔ)言的根本語(yǔ)法;理解順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的特點(diǎn)及應(yīng)用;掌握對(duì)基于對(duì)話框的MFC應(yīng)用程序設(shè)計(jì)方法;掌握一些簡(jiǎn)單算法二、實(shí)驗(yàn)內(nèi)容編寫前方交會(huì)的程序設(shè)計(jì)思路:通過反正切求得的角度范圍是“-90—90”,而方位角的取值范圍是“0—360”,因此需要通過方位角的象限來進(jìn)行轉(zhuǎn)換。還有一點(diǎn)不容無(wú)視,反正切函數(shù)求出的角度是弧度,而需要得到的方位角顯示的是度、分、秒。因此需要轉(zhuǎn)換。當(dāng)dx>0時(shí) dy>0,nQuadrant=1,Rad=atan(dy/dx)*180/PI dy<0, nQuadrant==4,Rad=(atan(dy/dx)+2*PI)*180/PI dy=0,Rad=0;當(dāng)dx<0時(shí), dy>0,nQuadrant=2,Rad=(atan(dy/dx)+PI)*180/PIdy<0,nQuadrant=3,Rad=(atan(dy/dx)+PI)*180/PI dy=0,Rad=180當(dāng)dx=0時(shí) dy>0,Rad=90 dy<0,Rad=270 dy=0,那么兩點(diǎn)重合,方位角不存在了計(jì)算出弧度(Rad)后,再將其轉(zhuǎn)化為度分秒輸出就完成了。 界面設(shè)計(jì):界面由5個(gè)文本框、5個(gè)靜態(tài)框和2個(gè)命令按鈕組成,需要完成輸入2點(diǎn)坐標(biāo),輸出方位角的功能其中文本控件屬性設(shè)置為:IDIDC_EDIT1IDC_EDIT2IDC_EDIT3IDC_EDIT4IDC_EDIT5添加變量X1Y1X2Y2A主要代碼:文件名TriAzimuthDlg.cpp#include"stdafx.h"#include"TriAzimuth.h"#include"TriAzimuthDlg.h"#include"math.h"…….voidCTriAzimuthDlg::OnBnClickedCancel(){ //TODO:在此添加控件通知處理程序代碼 OnCancel();}constdoublePI=3.1415926;voidCTriAzimuthDlg::OnBnClickedOk(){ //TODO:在此添加控件通知處理程序代碼 //OnOK();}//將弧度轉(zhuǎn)化成度分秒形式doubleRad_To_Dms(doubleRad){ doubledDeg,dDms;//十進(jìn)制角度及度分秒格式角度,控制變量 //用于存放度分秒三個(gè)值的變量 intiDegree,iMin; doubledSec; doubledTmp; dDeg=Rad*180/PI;//弧度轉(zhuǎn)化為度 //度轉(zhuǎn)化成度分秒iDegree=int(dDeg); dTmp=(dDeg-iDegree)*60; iMin=int(dTmp); dSec=(dTmp-iMin)*60; dDms=iDegree+double(iMin)/100+dSec/10000; returndDms; }voidCTriAzimuthDlg::OnBnClickedButton1(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(TRUE); doubledx,dy; doubleRad;//弧度,控制變量 dx=X2-X1; dy=Y2-Y1; if(dx>0) { if(dy>0) Rad=atan(dy/dx);//A為第一象限角 elseif(dy<0) Rad=atan(dy/dx)+2*PI;//A為第四象限角 else Rad=0;//A=0度 } elseif(dx<0) { if(dy>0) Rad=atan(dy/dx)+PI;//A為第二象限角 elseif(dy<0) Rad=atan(dy/dx)+PI;//A為第三象限角 else Rad=180;//A=180度 } else { if(dy>0) Rad=90;//A=90度 elseif(dy<0) Rad=270;//A=270度 else MessageBox(_T("兩點(diǎn)重合,無(wú)方位角")); } A=Rad_To_Dms(Rad);//將弧度轉(zhuǎn)化為度分秒形式 UpdateData(FALSE);}運(yùn)行結(jié)果:輸入兩點(diǎn)坐標(biāo)之后,單擊計(jì)算,可得方位角,以上方位角表示的是45°00′0000276342″空間直角坐標(biāo)系與大地坐標(biāo)系的相互轉(zhuǎn)換設(shè)計(jì)思路:大地坐標(biāo)系轉(zhuǎn)化為笛卡爾坐標(biāo)系:首先通過的長(zhǎng)半徑a和扁率α求出偏心率e和卯酉圈曲率半徑N;再根據(jù)以下公式可求得笛卡爾坐標(biāo)。X=(N+H)cosBcosLY=(N+H)cosBcosLZ=[N(1-e*e)+H]sinB笛卡爾坐標(biāo)系轉(zhuǎn)化為大地坐標(biāo)系:過程見流程圖的長(zhǎng)半徑a和扁率α的長(zhǎng)半徑a和扁率α求偏心率e求偏心率e輸入笛卡爾坐標(biāo)X、Y、Z輸入笛卡爾坐標(biāo)X、Y、ZB_Rad(B的弧度)賦值為0.0B_Rad(B的弧度)賦值為0.0將變量H的值賦給H0將變量H的值賦給H0True依次求出N,B_Rad,,H,dH(dH=H-H0)依次求出N,B_Rad,,H,dH(dH=H-H0)dH>0.00001dH>0.00001false求得B_Rad及H求得B_Rad及H根據(jù)X、Y的符號(hào)和反正切公式求出根據(jù)X、Y的符號(hào)和反正切公式求出L_Rad將L_Rad、B_Rad將L_Rad、B_Rad轉(zhuǎn)化為度分秒形式輸出L、B、H輸出L、B、H界面設(shè)計(jì):界面由6個(gè)文本框、6個(gè)靜態(tài)框和4個(gè)命令按鈕組成〔具體見運(yùn)行結(jié)果〕主要代碼:列出程序的代碼,按文件依次列出。注意代碼的書寫格式和注釋文件ConCoordinateDlg.cpp#include"stdafx.h"#include"ConCoordinate.h"#include"ConCoordinateDlg.h"#include"math.h"……voidCConCoordinateDlg::OnBnClickedCancel(){ //TODO:在此添加控件通知處理程序代碼 OnCancel();}constdoublea=6378137.0;//橢球長(zhǎng)半徑aconstdoublef=1/298.257223563;//扁率fconstdoublePI=3.1415926;voidCConCoordinateDlg::OnBnClickedOk(){ //TODO:在此添加控件通知處理程序代碼 L=0; B=0; H=0; X=a; Y=0; Z=0; UpdateData(FALSE); //OnOK();}//將弧度轉(zhuǎn)化成度分秒形式doubleRad_To_Dms(doubleRad){ doubledDeg,dDms;//十進(jìn)制角度及度分秒格式角度,控制變量 //用于存放度分秒三個(gè)值的變量 intiDegree,iMin; doubledSec; doubledTmp; dDeg=Rad*180/PI;//弧度轉(zhuǎn)化為度 //度轉(zhuǎn)化成度分秒iDegree=int(dDeg); dTmp=(dDeg-iDegree)*60; iMin=int(dTmp); dSec=(dTmp-iMin)*60; dDms=iDegree+double(iMin)/100+dSec/10000; returndDms; }//將度分秒形式轉(zhuǎn)化為弧度doubleDms_To_Rad(doubledDms){ intiDegree,iMin; doubledSec;//分別用于存放度、分、秒值的變量 doubledDeg;//十進(jìn)制角度,控制變量doubledRad;//弧度 iDegree=int(dDms);//截取度 iMin=int((dDms-iDegree)*100);//截取分dSec=((dDms-iDegree)*100-iMin)*100;//獲取秒dDeg=iDegree+double(iMin)/60+dSec/3600;//先把分秒轉(zhuǎn)化成度,再相加dRad=dDeg*PI/180;//轉(zhuǎn)化為弧度 returndRad;}voidCConCoordinateDlg::OnBnClickedButton1(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(TRUE);//將度分秒轉(zhuǎn)化成弧度 doubleL_Rad,B_Rad;//弧度 //將度分秒轉(zhuǎn)化為弧度L_Rad=Dms_To_Rad(L); B_Rad=Dms_To_Rad(B); doublee,N;//定義橢球偏心率e和卯酉圈曲率半徑N e=sqrt(2*f-f*f); N=a/sqrt(1-e*e*sin(B_Rad)*sin(B_Rad)); X=(N+H)*cos(B_Rad)*cos(L_Rad);Y=(N+H)*cos(B_Rad)*sin(L_Rad); Z=(N*(1-e*e)+H)*sin(B_Rad); UpdateData(FALSE);}voidCConCoordinateDlg::OnBnClickedButton2(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(TRUE); doubleL_Rad; doubleB_Rad=0.0;//弧度 doublee,N;//定義橢球偏心率e和卯酉圈曲率半徑N doubleH0;//循環(huán)中存儲(chǔ)上一個(gè)H的變量 doubledH;//儲(chǔ)存H增量值的變量 e=sqrt(2*f-f*f); do//迭代循環(huán)求H及B { H0=H; N=a/sqrt(1-e*e*sin(B_Rad)*sin(B_Rad));B_Rad=atan(Z/sqrt(X*X+Y*Y)/(1-e*e*N/(N+H))); H=sqrt(X*X+Y*Y)/cos(B_Rad)-N; dH=H-H0; }while(fabs(dH)>0.00001); B=Rad_To_Dms(B_Rad);//求B if(Y>0)//分情況討論經(jīng)度 { if(X>0) L_Rad=atan(Y/X); elseif(X<0) L_Rad=atan(Y/X)+PI; else L_Rad=PI/2; } elseif(Y<0) { if(X>0) L_Rad=atan(Y/X); elseif(X<0) L_Rad=atan(Y/X)-PI; else L_Rad=-PI/2; } else { if(X>0) L_Rad=0; elseif(X<0) L_Rad=PI; else MessageBox(_T("該點(diǎn)在地軸上")); } L=Rad_To_Dms(L_Rad);//求L UpdateData(FALSE); }運(yùn)行結(jié)果:如下圖,輸入笛卡爾坐標(biāo)X、Y、Z,單擊“笛卡爾轉(zhuǎn)大地”即可獲得大地坐標(biāo)L、B、H。同理輸入大地坐標(biāo),單擊“大地轉(zhuǎn)笛卡爾”即可獲得笛卡爾坐標(biāo)。設(shè)計(jì)技巧:這個(gè)程序存在大量角度的轉(zhuǎn)換,既需要將弧度化成度分秒,有需要將度分秒化成弧度,因此可事先為它們分別編寫函數(shù),程序中遇到坐標(biāo)轉(zhuǎn)換就可以直接調(diào)用,方便簡(jiǎn)潔。前方交會(huì)計(jì)算設(shè)計(jì)思路:程序中設(shè)計(jì)度分秒形式與弧度的轉(zhuǎn)換,可以編寫一個(gè)將度分秒轉(zhuǎn)化為弧度的函數(shù)函數(shù),將觀測(cè)值轉(zhuǎn)化為弧度形式。具體步驟為=1\*GB3①調(diào)用將度分秒轉(zhuǎn)化為弧度的函數(shù)將觀測(cè)角度轉(zhuǎn)化為弧度②根據(jù)三個(gè)點(diǎn)坐標(biāo)計(jì)算⊿ABC的三條邊長(zhǎng)a,b,c③由余弦定理分別求得角A、B、C的弧度值④對(duì)求得的六個(gè)弧度求正切值。⑤求分別三個(gè)一直點(diǎn)的權(quán)值⑥求出P點(diǎn)坐標(biāo)界面設(shè)計(jì):控件比擬多,有11個(gè)文本框、11個(gè)靜態(tài)框和2個(gè)命令按鈕?!簿唧w界面見運(yùn)行結(jié)果的截圖〕主要代碼:列出程序的代碼,按文件依次列出。注意代碼的書寫格式和注釋文件ResectionDlg.cppvoidCResectionDlg::OnBnClickedCancel(){ //TODO:在此添加控件通知處理程序代碼 OnCancel();}voidCResectionDlg::OnBnClickedOk(){ //TODO:在此添加控件通知處理程序代碼 OnOK();}constdoublePI=3.1415926;//將度分秒形式轉(zhuǎn)化為弧度doubleDms_To_Rad(doubledDms){ intiDegree,iMin; doubledSec;//分別用于存放度、分、秒值的變量 doubledDeg;//十進(jìn)制角度,控制變量doubledRad;//弧度 iDegree=int(dDms);//截取度 iMin=int((dDms-iDegree)*100);//截取分dSec=((dDms-iDegree)*100-iMin)*100;//獲取秒dDeg=iDegree+double(iMin)/60+dSec/3600;//先把分秒轉(zhuǎn)化成度,再相加dRad=dDeg*PI/180;//轉(zhuǎn)化為弧度 returndRad;}voidCResectionDlg::OnBnClickedButton2(){ //TODO:在此添加控件通知處理程序代碼 UpdateData(TRUE); doublea,b,c;//邊長(zhǎng) doubleA,B,C;//存儲(chǔ)三個(gè)內(nèi)角值的變量 doublePa,Pb,Pc;//權(quán)值變量 doubleRadP1,RadP2,RadP3;//三個(gè)觀測(cè)角的弧度轉(zhuǎn)化值 RadP1=Dms_To_Rad(P1); RadP2=Dms_To_Rad(P2); RadP3=Dms_To_Rad(P3);//P1,P2,P3為觀測(cè)角//求三角形邊長(zhǎng) a=sqrt((Xc-Xb)*(Xc-Xb)+(Yc-Yb)*(Yc-Yb)); b=sqrt((Xc-Xa)*(Xc-Xa)+(Yc-Ya)*(Yc-Ya)); c=sqrt((Xb-Xa)*(Xb-Xa)+(Yb-Ya)*(Yb-Ya)); //求三角形三內(nèi)角 A=acos((b*b+c*c-a*a)/(2*b*c)); B=acos((a*a+c*c-b*b)/(2*a*c)); C=acos((a*a+b*b-c*c)/(2*a*b)); //求權(quán)值 Pa=tan(RadP1)*tan(A)/(tan(RadP1)-tan(A)); Pb=tan(RadP2)*tan(B)/(tan(RadP2)-tan(B)); Pc=tan(RadP3)*tan(C)/(tan(RadP3)-tan(C));//求待測(cè)點(diǎn)坐標(biāo) Xp=(Pa*Xa+Pb*Xb+Pc*Xc)/(Pa+Pb+Pc); Yp=(Pa*Ya+Pb*Yb+Pc*Yc)/(Pa+Pb+Pc); UpdateData(FALSE);}運(yùn)行結(jié)果:輸入三個(gè)點(diǎn)坐標(biāo)及按個(gè)觀測(cè)角度值,單擊“計(jì)算”即顯示出P點(diǎn)坐標(biāo)。總結(jié)這次試驗(yàn)內(nèi)容很多,三個(gè)程序涵蓋了順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。試驗(yàn)過程中遇到了許多問題,通過不斷的發(fā)現(xiàn)問題、解決問題,編程的根本功在一點(diǎn)點(diǎn)加強(qiáng)。在試驗(yàn)之前,老師對(duì)相關(guān)原理進(jìn)行了講解,實(shí)驗(yàn)指導(dǎo)書給出的計(jì)算方法、公式都很詳實(shí),所以在邏
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流業(yè)無(wú)人機(jī)配送技術(shù)應(yīng)用方案
- 房地產(chǎn)業(yè)合伙經(jīng)營(yíng)協(xié)議書
- 典當(dāng)合同典當(dāng)行借款合同
- 取土場(chǎng)施工方案
- 西寧抗風(fēng)門施工方案
- 環(huán)境影響評(píng)價(jià)及保護(hù)方案手冊(cè)
- 四干渠電站施工方案
- 空心方樁施工方案
- 醫(yī)院智能化施工方案
- 電梯消防施工方案范本
- 2025國(guó)家電力投資集團(tuán)有限公司應(yīng)屆畢業(yè)生招聘筆試參考題庫(kù)附帶答案詳解
- 2025年個(gè)人所得稅贍養(yǎng)老人費(fèi)用分?jǐn)倕f(xié)議模板
- 2025年江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案
- (正式版)JBT 14449-2024 起重機(jī)械焊接工藝評(píng)定
- 天文小報(bào)(流星與彗星)
- 研發(fā)費(fèi)用明細(xì)表模板
- 日本文學(xué)史試卷
- 小學(xué)畢業(yè)計(jì)算題專題訓(xùn)練22套(共25頁(yè))
- 變電站綜合自動(dòng)化
- 農(nóng)村中學(xué)生良好學(xué)習(xí)習(xí)慣的養(yǎng)成
- CT新技術(shù)學(xué)習(xí)課程
評(píng)論
0/150
提交評(píng)論