版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理教學(xué)管理存在的問題
- 市政道路綠化升級(jí)工程協(xié)議
- 腎臟病常見的檢查及意義
- 牙體牙髓年終總結(jié)
- 熱力公司供暖系統(tǒng)安裝工程合同
- 主題酒店租賃協(xié)議模板
- 車站候車室彩鋼瓦安裝合同
- 旅游景點(diǎn)供配電安裝合同
- 糕點(diǎn)加工場(chǎng)地租賃合同
- 京東管理培訓(xùn)生
- 排架、腳手架驗(yàn)收記錄
- WANG氏TBNA穿刺定位法課件
- 酒店電梯的設(shè)置及選擇運(yùn)行要點(diǎn)管理
- 煤礦安全避險(xiǎn)系統(tǒng)有效性評(píng)估
- 濃密機(jī)電氣部分說明書
- 漢字應(yīng)用水平測(cè)試國(guó)家卷
- 曼昆《經(jīng)濟(jì)學(xué)原理》(微觀)第五版測(cè)試題庫(kù) (09)
- 2022年《父母課堂》如何幫助孩子順利度過小學(xué)分化年級(jí)教學(xué)案例
- 幕墻拆除施工方案-(2)
- 感染性心內(nèi)膜炎ppt課件
- 青春期人際交往
評(píng)論
0/150
提交評(píng)論