測(cè)繪程序設(shè)計(jì)_第1頁(yè)
測(cè)繪程序設(shè)計(jì)_第2頁(yè)
測(cè)繪程序設(shè)計(jì)_第3頁(yè)
測(cè)繪程序設(shè)計(jì)_第4頁(yè)
測(cè)繪程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩86頁(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.1測(cè)繪程序設(shè)計(jì)的意義

①計(jì)算機(jī)在現(xiàn)代測(cè)繪科學(xué)中的廣泛應(yīng)用帶來極大便利

方便、快速、準(zhǔn)確,可重復(fù)性

②測(cè)繪軟件不通用

測(cè)繪相關(guān)軟件豐富數(shù)據(jù)計(jì)算、制圖、遙感影像處理、數(shù)字?jǐn)z影測(cè)量、地理信息系統(tǒng)(GIS)、

GPS平差計(jì)算等軟件。

實(shí)際工作遇到的問題千差萬別,特定應(yīng)用需要掌握一門編程語言,設(shè)計(jì)相應(yīng)的程序解決

實(shí)際問題。

③編寫相關(guān)專業(yè)程序,深化測(cè)量知識(shí)的過程

2.1類型

C#數(shù)據(jù)類型分為值類型與引用類型;

①CTS(CommonTypeSystem)公共類型系統(tǒng)

②值類型與引用類型

從概念上看,值類型直接存儲(chǔ)其值,而引用類型存儲(chǔ)對(duì)值的引用;從在內(nèi)存中的存儲(chǔ)位置上

看,值類型變量把數(shù)據(jù)存儲(chǔ)在管中,引用類型變量把數(shù)據(jù)存儲(chǔ)在推中。

③預(yù)定義類型

值類型13個(gè):ShortInt類型;Floatdouble類型;char?類型等等

引用類型2個(gè):object類型;string類型

通過加前綴@,使編譯器嚴(yán)格按照原樣對(duì)其編譯。

strings=@"hello\nworld";結(jié)果輸出hello\nworld

2.2變量與常量

變?與內(nèi)存

每次聲明變量時(shí),計(jì)算機(jī)都會(huì)給它分配一塊足夠大的內(nèi)存空間,來保存該類型的變量。

相同類型的不同變量總是占據(jù)相同大小的內(nèi)存。

但不同類型的變量需要分配的內(nèi)存空間就不一樣了。這就需要?jiǎng)澐诸愋汀?/p>

使用變量

使用變量就是聲明他們。即給變量指定名稱和類型。修飾符-數(shù)據(jù)類型-標(biāo)識(shí)符publicinti;

標(biāo)識(shí)符

變量名首字符必須是字母、下劃線(1')或“@”;

其后字符必須是字母、下劃線或數(shù)字;

切忌使用C#關(guān)鍵字。如果需要使用,須在標(biāo)識(shí)符前邊加上“@”(如?abstract)。

命名變量的一些約定:

給變量分配有意義的名稱;

命名類和方法時(shí)使用PascalCase樣式,命名變量使用camelCase樣式;

不要通過大小寫的不同來區(qū)分變量。

初始化變量

注意初始值要與聲明的類型相一致decimalbankBalance=34.50;//錯(cuò)誤

可以通過附加后綴來指定數(shù)值類型decimalbankBalance=34.50M;//正確

可以使用的后綴:U無符號(hào)L長(zhǎng)整型UL無符號(hào)長(zhǎng)整型F浮點(diǎn)型D雙精度型M十進(jìn)制

常量

聲明常量時(shí)必須對(duì)其賦值constfloatpi=3.14f

2.3類型轉(zhuǎn)換

顯式轉(zhuǎn)換方式:

Convert.Tolnt32xint.Parse,int.TryParse,(int)四者都可以解釋為將類型轉(zhuǎn)換為int,那

它們的區(qū)別是什么呢?

Convert.Tolnt32與int.Parse較為類似,實(shí)際上Convert.Tolnt32內(nèi)部調(diào)用了int.Parse:

Convert.Tolnt32參數(shù)為null時(shí),返回0;

int.Parse參數(shù)為null時(shí),拋出異常。

Convert.Tolnt32參數(shù)為""時(shí),拋出異常;

Int.Parse參數(shù)為""時(shí),拋出異常。

Convert.Tolnt32可以轉(zhuǎn)換的類型較多;

int.Parse只能轉(zhuǎn)換數(shù)字類型的字符串。

3.1方位角算法

方位角計(jì)算

{

Console.WriteLine("PleaseEnterXI

doubleXI=Convert.ToDouble(Console.ReadLine());

Console.WriteLine("PleaseEnterY1

doubleY1=Convert.ToDouble(Consolc.ReadLine());

Console.WriteLine(uPleaseEnterX2:");

doubleX2=Convert.ToDouble(Console.ReadLine());

Console.WrileLine("PleaseEnterY2:u);

doubleY2=Convcrt.ToDouble(Console.ReadLine());

doubledetX=X2-X1;

doubledexY=Y2-Yl;

doublefwj;

if(Math.Abs(detX)<0.0000001)

(

if(dexY>0)

fwj=90;

else

fwj=270;

)

else

fwj=dexY/detX;

fwj=Malh.Atan(fwj);

fwj=fwj*180/Math.PI;

if(detX<0)

fwj=fwj+180;

elseif(dexY<0)〃若detY>0,fwj沒做處理,fwj二fwj

fwj=fwj+360;

)

Console.WrileLine(Hfwjoftwopointis\n{0}",fwj);

Consolc.ReadKeyO;

}

3.2字符串的處理

GetLength獲得指定維度的長(zhǎng)度IndexOf返回指定值第一次出現(xiàn)的索引值

Lengh獲取元素個(gè)數(shù)

<string>.Trim()可以使用這個(gè)命令刪除其他字符只要在一個(gè)char數(shù)組中指定這些字符即可;

<string>.PadLeft()<string>.PadRight()他們可以在字符串左邊或者右邊添加空格,使字符串

達(dá)到指定長(zhǎng)度。

myString="Aligned";myString=myString.PadLeft(10);〃補(bǔ)3個(gè)空格

4.1函數(shù)構(gòu)成

C#中函數(shù)的參數(shù)有4種類型:

值參數(shù),不含任何修飾符;引用型參數(shù),以ref修飾符聲明。

輸出參數(shù),以out修飾符聲明;數(shù)組型參數(shù),以params修飾符聲明

Ref關(guān)鍵字

classProgram

(

staticvoidMain(stringOargs)

inta=3;

intb=5;

change(refa,refb);

Console.WriteLine(na={0},b={1}",a,b);

}

staticvoidchange(refinta1,refintb1)

(

intt;t=a1;a1=b1;b1=t;

)

)

Out關(guān)鍵字

staticvoidMain(string[]args)

{

Console.WriteLine(nout參數(shù)輸出*');

inta,b;

UseOut(outa,outb);

H

Console.WriteLine("調(diào)用UseOut函數(shù)后返回主程序:a={0}5b={1},a,b);

Console.ReadLine();

}

privatestaticvoidUseOut(outintx,outinty)

{

inttemp;

x=20;

y=30;

Console.WriteLine("\n函數(shù)內(nèi)交換前x={0},y={1}'\x,y);

temp=x;x=y;

y=temp;

Console.WriteLine("\n函數(shù)內(nèi)交換后x={0},y={1}'\x,y);

)

Param關(guān)鍵字

classProgram

(

staticintMax(paramsin"Age)

(

inttemp=0;

for(inti=0;i<Age.Length;i++)

{

if(temp<Age[i])

temp=Age[i];

)

returntemp;

)

staticvoidMain(string[]args)

(

intmaxAge=Max(18,23,19,22,27);

Console.WriteLine(nthemaxofageis:{0}",maxAge);

)

)

4.2常用的測(cè)量函數(shù)設(shè)計(jì)

坐標(biāo)正算

classProgram

(

staticvoidMain(string[]args)

(

doubleXa=2.5;doubleYa=2.5;doubleS=12.34;

doubleA=1.2;doubleXi=0;doubleYi=0;

CalCoord(Xa,Ya,S,A,refXi,refYi);

Console.WriteLine("坐標(biāo)x={0}y={1}H,Xi,Yi);

Console.ReadKey();

)

staticprivatevoidCalCoord(doubleXa,doubleYa,doubleS,double

A,refdoubleXi,refdoubleYi)

(

Xi=Xa+S*Math.Cos(A);

Yi=Ya+S*Math.Cos(A);

)

)

Ref也可以改為out關(guān)鍵字,結(jié)果相同,若不加ref/out結(jié)果錯(cuò)誤,或用定義一個(gè)結(jié)構(gòu)體

classProgram

structpPoint

(

publicdoubleX;

publicdoubleY;

)

staticvoidMain(string[]args)

(

doubleXa=2.5;doubleYa=2.5;doubleS=12.34;doubleA=1.2;

pPointp=CalCoord(Xa,Ya,S,A);

Console.WriteLine("坐標(biāo)x={0}y={1}n,p.X,p.Y);

Console.ReadKey();

)

staticprivatepPointCalCoord(doubleXa,doubleYa,doubleS,doubleA)

(

pPointp;

p.X=Xa+S*Math.Cos(A);

p.Y=Ya+S*Math.Cos(A);

returnp;

)

方位角推算

classProgram

staticvoidMain(stringOargs)

(

inti=0;

do

{

Console.WriteLine("輸入方位角:

stringstr=Console.ReadLine();

Console.WriteLine("輸入轉(zhuǎn)折角:”);

doublezzj=Convert.ToDouble(Console.ReadLine());

doubleA=Azm(DmsToRad(str),DmsToRad(zzj.ToString()));

Console.WriteLine(RadToDms(A));

Console.WriteLine(”0繼續(xù),1退出”);

i=Convert.Tolnt32(Console.ReadLine());

Console.ReadKey();

}

while(i==0);

)

staticdoubleAzm(doublea,doublejiao)

returnTo2Pi(a+jiao+Math.PI);

)

staticdoubleTo2Pi(doubleradAngle)

(

radAngle=radAngle-Math.Truncate(radAngle/(Math.PI*2))*Math.PI

if(radAngle<0)

radAngle+=Math.PI*2;

returnradAngle;

)

staticdoubleDmsToRad(stringdms)

(

inti=dms.lndexOf(".,,);

if(i>0)

(

doubledu=Convert.ToDouble(dms.Substring^,i));

doublefen=Convert.ToDouble(dms.Substring(i+1,2));

doublemiao=Convert.ToDouble(dms.Substring(i+3,2));

du=du+fen/60+miao/3600;

returnTransR(du);

}

else

returnTransR(Convert.ToDouble(dms));

)

publicstaticdoubleTransR(doubledu)

(

returndu*Math.PI/180;

)

staticdoubleRadToDms(doubleradA)

(

radA=TransD(radA);

doubledu=Math.Truncate(radA);

doublefen=Math.Truncate((radA-du)*60);

doublemiao=(radA-du-fen/60.0)*3600;

returndu+fen/100+miao/10000;

)

staticdoubleTransD(doublehu)

(

returnhu*180/Math.PI;

)

4.3投影換帶(不考,有興趣自己看看)

4.4異常處理

代碼中的錯(cuò)誤主要分為兩種,一種是語法錯(cuò)誤,另一種是邏輯錯(cuò)誤。

5.1C#文件系統(tǒng)數(shù)據(jù)

讀取文件

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.IO;

namespaceConsoleApplicationl

{

classProgram

(

staticvoidMain(stringQargs)

(

FileStreamfs=newFileStream(@”f:\測(cè)繪程序設(shè)計(jì).txt”,F(xiàn)ileMode.Open);

StreamReadersr=newStreamReader(fs);

stringMyString=sr.ReadLine();

Console.WriteLine(MyString);

MyString=sr.ReadLine();

Console.WriteLine(MyString);

sr.Close();

Console.ReadKey();

)

)

}

寫入文件

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.IO;

namespaceConsoleApplicationl

{

classProgram

(

staticvoidMain(string[]args)

(

FileStreamfs=newFileStream(@"f:\測(cè)繪程序設(shè)計(jì).txt”,

FileMode.OpenOrCreate);

StreamWritersw=newStreamWriter(fs);

sw.WriteLine("測(cè)繪程序設(shè)計(jì)”);

sw.Write(54);

sw.Write("學(xué)時(shí))

sw.Close();

)

)

)

類和對(duì)象(看看就好)

構(gòu)造器(構(gòu)造函數(shù))是一個(gè)特殊的方法,用于執(zhí)行類的實(shí)例的初始化,創(chuàng)建對(duì)象,它在創(chuàng)建

對(duì)象時(shí)自動(dòng)運(yùn)行。

一個(gè)類的構(gòu)造函數(shù)與類名相同

創(chuàng)建對(duì)象的根本途徑是構(gòu)造器,通過new關(guān)鍵字來調(diào)用某個(gè)類的構(gòu)造器即可創(chuàng)建這個(gè)類的

實(shí)例。Rectangularobj=newRectangular();

通過對(duì)象名打點(diǎn)來調(diào)用對(duì)象的屬性和方法就是對(duì)對(duì)象的操作。

調(diào)用屬性:obj.width=20;調(diào)用方法:obj.getArea();

File類的一些常用的靜態(tài)方法。

方法說明

Copy()將文件從源位置復(fù)制到目標(biāo)位置

Create()在指定路徑上創(chuàng)建文件

Delete()刪除文件

Open()返回指定路徑上的FileStream對(duì)象

Move()將指定文件移動(dòng)到新位置

Directory類的一些常用的靜態(tài)方法

方法說明

CreateDirectory()創(chuàng)建具有指定路徑的目錄

Delete()刪除指定的目錄及其中的所有文件

GetDirectories()返回表示指定目錄下的目錄名的String對(duì)象數(shù)組

GetFiles()返回在指定目錄中的文件名的string對(duì)象數(shù)組

Move()將指定目錄移到新位置。

〃通過File.Create。獲取FileStream對(duì)象

FileStreamfs=File.Create(@"d:\123.txt");

//通過File.Open。獲取FileStream對(duì)象

FileStreamfs2=File.Open(@"d:\123.txt*',FileMode.OpenOrCreate,

FileAccess.ReadWrite,FileShare.None);

〃得到一個(gè)只讀權(quán)限的FileStream對(duì)象

FileStreamreadOnlyStream=File.OpenRead(@"d:\123.txt");

〃得到一個(gè)只寫權(quán)限的FileStream對(duì)象

FileStreamwriteOnlyStream=File.OpenWrite(@"d:\123.txt");

〃得到一個(gè)StreamReader對(duì)象

StreamReadersreader=File.OpenText(@"d:\123.txt'*);

〃得到一個(gè)StreamWMter對(duì)象

StreamWriterswriter=File.CreateText(@"d:\123.txt");

StreamWriterswriterAppend=File.AppendText(@"d:\123.txt'*);

實(shí)習(xí)作業(yè)

在程序中輸入一個(gè)文件夾路徑,讀取該文件夾下所有文本文檔。

根據(jù)文本文檔第一行的值,判斷所要進(jìn)行的操作。

1,大地坐標(biāo)轉(zhuǎn)換為高斯平面直角坐標(biāo);2->高斯平面坐標(biāo)轉(zhuǎn)換為大地坐標(biāo);3->高斯平面坐

標(biāo)轉(zhuǎn)換為高斯平面坐標(biāo)

將結(jié)果存入到指定文件夾下,在文件末尾寫入自己的名字和學(xué)號(hào)(要求為.txt格式)

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.IO;

namespaceConsoleApplicationl

{

classProgram

{

staticvoidMain(string[]args)

〃獲取文件夾路徑

string[]fs=Directory.GetFiles(@"f:\測(cè)繪程序設(shè)計(jì)");

Console.WriteLine("進(jìn)行哪種運(yùn)算:");

Console.WriteLine(”1.大地坐標(biāo)轉(zhuǎn)換為高斯平面直角坐標(biāo)2.高斯平面坐標(biāo)轉(zhuǎn)

換為大地坐標(biāo)3.高斯平面坐標(biāo)轉(zhuǎn)換為高斯平面坐標(biāo))

〃讀取f:\測(cè)繪程序設(shè)計(jì)下所有文檔

FileStreamfs1=File.Open(@"f:\測(cè)繪程序設(shè)計(jì)\1.txt",

FileMode.OpenOrCreate);

StreamReadersr1=newStreamReader(fs1);

stringmystringl=sr1.ReadLine();

FileStreamfs2=File.Open(@Hf:\測(cè)繪程序設(shè)計(jì)\2.txf,

FileMode.OpenOrCreate);

StreamReadersr2=newStreamReader(fs2);

stringmystring2=sr2.ReadLine();

FileStreamfs3=File.Open(@nf:\測(cè)繪程序設(shè)計(jì)\3.txt”,

FileMode.OpenOrCreate);

StreamReadersr3=newStreamReader(fs3);

stringmystring3=sr3.ReadLine();

〃橢球參數(shù)

doublea=6378245;

doublef=298.3;

〃坐標(biāo)轉(zhuǎn)換

stringi=Convert.ToString(Console.ReadLine());

intt=0;

if(i==mystring1)

(

doublex;

doubley;

stringmystring4=sr1.ReadLine();

Console.WriteLine(,,{0},,,mystring4);

stringmystring5=sr1.ReadLine();

Console.WriteLine("{0}”,mystring5);

double[]s=newdouble[2];

intn=mystring5.IndexOf

s[0]=Convert.ToDouble(mystring5.Substring(0,n));

s[1]=Convert.ToDouble(mystring5.Substring(n+1));

doublej=0;

do

(

j=(s[1]-(6*t-3));

t++;

)

while(Math.Abs(j)>3);

doubleB=s[0];

doubleL=j;

prmrePrm=Ecd(a,f);

GaussZs(B,L,rePrm,outx,outy);

Console.WriteLine("平面上的坐標(biāo)x:{0}y:{1}H,x,y);

〃輸出姓名學(xué)號(hào)

StreamWriterrs=newStreamWriter(fs1);

rs.WriteLine("孫汝星20114776");

rs.Close();

)

elseif(i==mystring2)

{

doubleB;

doubleL;

stringmystring6=sr2.ReadLine();

Console.WriteLine("{0}”,mystring6);

stringmystring7=sr2.ReadLine();

Console.WriteLine(n{0}",mystring7);

double[]p=newdouble[5];

intnn=mystring7.IndexOf(n,n);

p[0]=Convert.ToDouble(mystring7.Substring(0,nn));

p[1]=Convert.ToDouble(mystring7.Substring(nn+1));

p[2]=p[1]/1000000;

Console.WriteLine(p[2]);

p[3]=p[1]%1000000/1000000;

Console.WriteLine(p[3]);

p[4]=p[2]-p[3];

Console.WriteLine(“帶號(hào){0}”,p[4]);

doublex=p[O];//-pp[4]*100000;

doubley=p[1]-p[4]*1000000-500000;

prmrePrem=Ecd(a,f);

GaussFs(outB,outL,rePrem,x,y);

Console.WriteLine(n平面上的坐標(biāo)b:{0}RadToDms(B),

RadToDms(L)+6*p[4]-3);

StreamWriterrs1=newStreamWriter(fs2);

rs1.WriteLine(“孫汝星20114776");

rs1.Close();

)

elseif(i==mystring3)

doubleB;

doubleL;

stringmystring8=sr3.ReadLine();

Console.WriteLine("{0}”,mystring8);

stringmystring9=sr3.ReadLine();

Console.WriteLine("{0}”,mystring9);

double[]m=newdouble[5];

intnnn=mystring9.IndexOf

m[0]=Convert.ToDouble(mystring9.Substring(0,nnn));

m[1]=Convert.ToDouble(mystring9.Substring(nnn+1));

m[2]=m[1]/1000000;

m[3]=m[1]%1000000/1000000;

m[4]=m[2]-m[3];

Console.WriteLine("帶號(hào){0「m[4]);

doublex=m[0];

doubley=m[1]-m[4]*1000000-500000;

prmrePrem=Ecd(a,f);

GaussFs(outB,outL,rePrem,x,y);

Console.WriteLine("平面上的坐標(biāo)b:{0}RadToDms(B),

RadToDms(L)+6*m[4]-3);

Console.WriteLinef'RadToDms(L){0}n,RadToDms(L));

Console.WriteLine("輸入帶號(hào)”);

intap=int.Parse(Console.ReadLine());

doubleq;

q=ap*6-3;

doublew;

w=RadToDms(L)+6*m[4]-3-q;

Console.WriteLine("{0}帶經(jīng)度{1}緯度{2}“,ap,w,RadToDms(B));

doublex1;

doubley1;

doubleB1=RadToDms(B);

doubleL1=w;

prmrePrm=Ecd(a,f);

GaussZs(B1,L1,rePrm,outx1,outy1);

if(ap>20)

{

Console.WriteLinef'平面上的坐標(biāo)x:{0}y:{1}H,

x1,(ap-20)*500000-y1);

)

if(ap<=20)

(

Console.WriteLine("平面上的坐標(biāo)x:{0}y:{1}H,x1,

y1-(20-ap)*50000);

)

StreamWriterrs2=newStreamWriter(fs3);

rs2.WriteLine("孫汝星201147761');

rs2.Close();

}

Console.ReadKey();

)

//<summary>

///高斯涉及參數(shù)結(jié)構(gòu)

Ill</summary>

publicstructprm

(

publicdoubleTa;

publicdoubleTb;

publicdoubleTc;

publicdoubleTd;

publicdoubleTe;

publicdoubleTet;

publicdoubleAO;

publicdoubleBO;

publicdoubleCO;

publicdoubleDO;

publicdoubleEO;

publicdoubleTe2;

publicdoubleTe4;

publicdoubleTe6;

publicdoubleTe8;

)

publicstaticprmEcd(doublea,doublef)

prmnewPrm=newprm();

newPrm.Ta=a;

newPrm.Tb=a-a/f;

newPrm.Tc=Math.Pow(newPrm.Ta,2)/newPrm.Tb;

newPrm.Td=Math.Pow(newPrm.Tb,2)/newPrm.Ta;

newPrm.Te=Math.Sqrt((newPrm.Ta*newPrm.Ta-newPrm.Tb*

newPrm.Tb)/(newPrm.Ta*newPrm.Ta));

newPrm.Tet=Math.Sqrt((newPrm.Ta*newPrm.Ta-newPrm.Tb*

newPrm.Tb)/(newPrm.Tb*newPrm.Tb));

newPrm.Te2=Math.Pow(newPrm.Te,2);

newPrm.Te4=Math.Pow(newPrm.Te,4);

newPrm.Te6=Math.Pow(newPrm.Te,6);

newPrm.Te8=Math.Pow(newPrm.Te,8);

newPrm.AO=1+3d/4d*newPrm.Te2+45d/64d*newPrm.Te4+175d/

256d*newPrm.Te6+11025d/16384d*newPrm.Te8;

newPrm.BO=3d/4d*newPrm.Te2+45d/64d*newPrm.Te4+175d/

256d*newPrm.Te6+11025d/16384d*newPrm.Te8;

newPrm.CO=15d/32d*newPrm.Te4+175d/384d*newPrm.Te6+

3675d/8192d*newPrm.Te8;

newPrm.DO=35d/96d*newPrm.Te6+735d/2048d*newPrm.Te8;

newPrm.EO=315d/1024d*newPrm.Te8;

returnnewPrm;

)

publicstaticvoidGaussZs(doubleb,doubleI,prmgaussPrm,outdoublex,out

doubley)

(

doubleXh=Xl(b,gaussPrm);

doubleSinB=Math.Sin(b);

doubleCosB=Math.Cos(b);

doubleCosB2=Math.Pow(CosB,2);

doubleCosB3=Math.Pow(CosB,3);

doubleCosB4=Math.Pow(CosB,4);

doubleCosB5=Math.Pow(CosB,5);

doubleg=gaussPrm.Tet*CosB;

doubleg2=Math.Pow(g,2);

doubleg4=Math.Pow(g,4);

doubleN=gaussPrm.Tc/Math.Sqrt(1d+g2);

doubleI2=Math.Pow(l,2);

doubleI4=Math,Pow(l,4);

doubleI6=Math.Pow(l,6);

doublet=Math.Tan(b);

doublet2=Math.Pow(t,2);

doublet4=Math.Pow(t,4);

x=Xh+N/2d*SinB*CosB*12+N/24d*SinB*CosB3*(5d-12+9d*

g2+4d*g4)*14+N/720d*SinB*CosB5*(61d-58d*t2+14+270d*g2-330d*g2*

t2)*I6;

y=N*CosB*1*(1+CosB2*I2*(1-12+g2)/6d+CosB4*l4*(5-18*t2

+t4+14*g2-58*t2*g2)/120d);

}

publicstaticdoubleXl(doubleb,prmgaussPrm)

(

doubleSinB=Math.Sin(b);doubleCosB=Math.Cos(b);

doubleSinB3=Math.Pow(SinB,3);

doubleSinB5=Math.Pow(SinB,5);

doubleSinB7=Math.Pow(SinB,7);

returngaussPrm.Td*(gaussPrm.AO*b-gaussPrm.BO*SinB*CosB-

gaussPrm.CO*SinB3*CosB-gaussPrm.DO*SinB5*CosB-gaussPrm.EO*SinB7*

CosB);

)

publicstaticvoidGaussFs(outdoubleb,outdoubleI,prmnewPrm,doublex,

doubley)

doublebF=Bfc(x,newPrm);

doubleSinBf=Math.Sin(bF);

doubleCosBf=Math.Cos(bF);

doublegf=newPrm.Tet*CosBf;

doublegf2=Math.Pow(gf,2);

doublegf4=Math.Pow(gf,4);

doubleNf=newPrm.Tc/Math.Sqrt(1+gf2);

doubleNf2=Math.Pow(Nf,2);

doubleNf3=Math.Pow(Nf,3);

doubleNf4=Math.Pow(Nf,4);

doubleNf5=Math.Pow(Nf,5);

doubleNf6=Math.Pow(Nf,6);

doubletf=Math.Tan(bF);

doubletf2=Math.Pow(tf,2);

doubletf4=Math.Pow(tf,4);

l=1d/(Nf*CosBf)*y-(1+2*tf2+gf2)/(6*Nf3*CosBf)*Math.Pow(y,3)

+(5+28*tf2+24*tf4+6*gf2+8*gf2*tf2)/(120*Nf5*CosBf)*Math.Pow(y,5);

b=bF-(tf*(1+gf2))/(24*Nf2)*Math.Pow(y,2)+(tf*(5+3*tf2+6*gf2

-6*tf2*gf2-3*gf4+9*gf4*tf4))/(24*Nf4)*Math.Pow(y,4)-(tf*(61+90*tf2+45

*tf4+107*gf2+162*gf2*tf2+45*gf2*tf4))/(720*Nf6)*Math.Pow(y,6);

)

publicstaticdoubleDmsToRad(stringdmsA)

(

intp=dmsA.lndexOf(',.n);

if(P>0)

(

doubleDegree=Convert,ToDouble(dmsA.Substring(0,p));

stringstr=dmsA.Substring(p+1);

doubleM=Convert.ToDouble(str,Substnng(0,2));

doubleS=Convert.ToDouble(str.Substring(2,2));

doubledu=(Degree+M/60.0+S/3600.0);

returnTransR(du);

}

else

{

returnTransR(Convert.ToDouble(dmsA));

)

)

publicstaticdoubleTransR(doubledu)

returndu*Math.PI/180.0;

}

publicstaticdoubleRadToDms(doubleradA)

(

radA=TransD(radA);

doubledu=Math.Truncate(radA);

doublefen=Math.Truncate((radA-du)*60);

doublemiao=((radA-du)*60-fen)*60;

returndu+fen/100+miao/10000;

)

staticdoubleTransD(doublehu)

(

returnhu*180/Math.PI;

)

publicstaticdoubleBfc(doublex,prmnewPrm)

(

doublebfO;

bfO=x/newPrm.A0;

inti=0;

while(i<10000)

doubleSinBf=Math.Sin(bfO);

doubleCosBf=Math.Cos(bfO);

doubleSinBf3=Math.Pow(SinBf,3);

doubleSinBf5=Math.Pow(SinBf,5);

doubleSinBf7=Math.Pow(SinBf,7);

doubleBF=(x/newPrm.Td+CosBf*(newPrm.BO*SinBf+

newPrm.CO*SinBf3+newPrm.DO*SinBf5+newPrm.EO*SinBf7))/newPrm.AO;

if(Math.Abs(BF-bfO)<0.0000000001)

returnBF;

bfO=BF;

return-1;

6.1矩陣的基本運(yùn)算

矩陣加減程序設(shè)計(jì)

publicstaticboolMatrixPlus(double[,]a,double[,]b,outdouble[,]c)

intm=a.GetLength(O);

intn=a.GetLength(l);

intml=b.GetLength(O);

intn1=b.GetLength(l);

c=newdouble[m,n];

if(m==ml&&n==n1)

{

for(inti=0;i<m;i++)

(

for(intj=0;j<n;j++)

(

c[i,j]=a[i,j]+b[i,j];

)

}

returntrue;

)

else

(

returnfalse;

)

)

矩陣轉(zhuǎn)置程序設(shè)計(jì)

publicstaticvoidMatrixTrans(double[,]a,outdoublef,]c)

intm=a.GetLength(O);

intn=a.GetLength(l);

c=newdouble[n,m];

for(inti=0;i<m;i++)

(

for(intj=0;j<n;j++)

{

c[j,i]=a[i,j];

)

)

)

矩陣相乘程序設(shè)計(jì)

publicstaticboolMatrixMulti(double[,]a,double[,]b,outdouble[,]c)

(

c=newdouble[m,n1];

if(n==m1)

(

for(inti=0;i<m;i++)

for(intj=0;j<n1;j++)

for(intk=0;k<n;k++)

c[ij]+=a[i,k]*b[k,j];

}

}

)

returntrue;

}

else

(

returnfalse;

)

)

高斯投影

namespace高斯投影

(

classProgram

{

publicstaticvoidMain(stringQargs)

doublea=6378245;

doublef=298.3;

Console.WMteLine("進(jìn)行哪種運(yùn)算:1.正算(經(jīng)差)2.反算3.正算(經(jīng)度)4.

換帶計(jì)算)

inti=Convert.Tolnt16(Console.ReadLine());

if(i==1)

(

doublex;

doubley;

doubleB=17.33557339;

doubleL=2.15521159;

gaosi.prmrePrm=gaosi.Ecd(a,f);

gaosi.GaussZs(B,L,rePrm,outx,outy);

Console.WriteLine("平面上的坐標(biāo)x:{0}y:{1}",x,y);

)

elseif(i==2)

(

doubleB;

doubleL;

doublex=1944359;

doubley=240455.4563;

gaosi.prmrePrem=gaosi.Ecd(a,f);

gaosi.GaussFs(outB,outL,rePrem,x,y);

Console.WriteLine(n平面上的坐標(biāo)b:{0}l:{1}",gaosi.RadToDms

(B),gaosi.RadToDms(L));

}

elseif(i==3)

{

doubleB=17.33557339;

doubleL=119.15521159;

doublex;

doubley;

intN=Convert.Tolnt32(Math.Truncate(L+3)/6);

doubleL0=6*N-3;

gaosi.prmrePrem=gaosi.Ecd(a,f);

gaosi.GaussZs(B,L,L0,rePrem,outx,outy);

Console.WriteLine("平面上的坐標(biāo)x:{0}y:{1}'\x,y);

}elseif(i==4)

(

doubleB;

doubleL;

doublex=1944359;

doubley=20740455.4563;

y=Convert.ToDouble(y.ToString().Substring(2))-500000;

gaosi.prmrePrem=gaosi.Ecd(a,f);

gaosi.GaussFs(outB,outL,rePrem,x,y);

intN=Convert.Tolnt32(y.ToString().Substring(0,2));

〃6度帶

intL0=6*N-3;

doubleB1=gaosi.RadToDms(B);

doubleL1=gaosi.RadToDms(L)+L0;

Console.WriteLine("平面上的坐標(biāo)b:{0}l:{1}",B1,L1);

〃3度帶

//doubleL0=3*N;

//Console.WriteLine("平面上的坐標(biāo)b:{0}l:{1}n,gaosi.RadToDms

(B),gaosi.RadToDms(L)+L0);

doublex1;

doubley1;

gaosi.GaussZs(B1,L1,L0+6,rePrem,outx1,outy1);

Console.WriteLine("平面上的坐標(biāo)x:

溫馨提示

  • 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)論