通用测绘C#程序设计源代码.docx
《通用测绘C#程序设计源代码.docx》由会员分享,可在线阅读,更多相关《通用测绘C#程序设计源代码.docx(49页珍藏版)》请在冰豆网上搜索。
通用测绘C#程序设计源代码
*-
常用测量程序设计
(1)用全站仪在A点观测了B点斜边和垂直角,求A到B的高差。
2D2a?
i?
v?
(1?
k)hcos?
Dsinaavi--反--(提示:
D--斜边,仪器高,--垂直角,,
AB2R光镜高,--大气折光系数)kusingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write(请输入斜边尽);
doubleD=double.Parse(Console.ReadLine());
Console.Write(请输入垂直角摛摤洮獭嵳尽);
doublea=DEG(double.Parse(Console.ReadLine()));
Console.Write(请输入仪器高尽);
doublei=double.Parse(Console.ReadLine());
Console.Write(请输入反光镜高尽);
doublev=double.Parse(Console.ReadLine());
doubleh=D*Math.Sin(a)+(1-0.13)*D/6371000.0*D/6371000.0*Math.Cos(a)
*Math.Cos(a)/2.0+i-v;
Console.WriteLine(高差为ほ屽,h);
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang)
{
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang);
intd=(int)ang;
intm=((int)(ang*100))-d*100;
doubles=ang*10000-m*100-d*10000;
return((d+m/60.0+s/3600.0)*fuhao)/180.0*Math.PI;
}
}
}
*-
B点的坐标。
点到B点的边长及方位角,计算
(2)如图所示,已知A点的坐标及A
System;
usingSystem.Collections.Generic;usingSystem.Text;
usingConsoleApplication1namespace{
Applicationclass
{
[]args)voidMain(stringstatic
{
);
坐标尽X.Write(请输入A点的Console.ReadLine());.Parse(ConsoledoubleXA=double);
坐标尽请输入A点的YConsole.Write(.ReadLine());.Parse(ConsoledoubleYA=double);摛摤洮獭嵳尽A到B的方位角Console.Write(请输入.ReadLine()));Consoledoublea=DEG(double.Parse(
);尽到B的水平距离Console.Write(请输入A.ReadLine());ConsoleS=double.Parse(double.Cos(a);doubleXB=XA+S*Math
.Sin(a);
doubleYB=YA+S*Math
XB,YB);)Console.WriteLine(B点的坐标(}
转为弧度将ddd.mmss//ang)DEG(doublestaticpublicdouble
{
.Abs(ang));)(ang/Mathintfuhao=(int.Abs(ang);ang=Math)ang;
intintd=()(ang*100))-d*100;
intintm=((s=ang*10000-m*100-d*10000;
double
.PI;Mathreturn((d+m/60.0+s/3600.0)*fuhao)/180.0*
}
}
}
点到的边长及方位角。
点的坐标,计算AB3()如图所示,已知A点和System;
usingSystem.Collections.Generic;using
System.Text;
usingConsoleApplication1namespace{
Applicationclass
{
*-
staticvoidMain(string[]args)
{
Console.Write(请输入A点的X坐标尽);
doubleXA=double.Parse(Console.ReadLine());
Console.Write(请输入A点的Y坐标尽);
doubleYA=double.Parse(Console.ReadLine());
Console.Write(请输入B点的X坐标尽);
doubleXB=double.Parse(Console.ReadLine());
Console.Write(请输入B点的Y坐标尽);
doubleYB=double.Parse(Console.ReadLine());
doubleS=距离(XA,YA,XB,YB);
doublea=方位角(XA,YA,XB,YB);
Console.WriteLine(AB间的距离={0},从A到B的方位角笽紱,S,DMS(a));
}
//将弧度转为ddd.mmss
staticpublicdoubleDMS(doubleang)
{
ang+=1.0E-15;//加上一个小量,以保证进位
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang)*180.0/Math.PI;
intd=(int)ang;
ang=(ang-d)*60.0;
intm=(int)ang;
doubles=(ang-m)*60.0;
return(d+m/100.0+s/10000.0)*fuhao;
}
//计算方位角,返回弧度值
publicstaticdouble方位角(doublex1,doubley1,doublex2,doubley2)
{
doubledeltaX=x2-x1;
doubledeltaY=y2-y1;
doubleangle=Math.PI*0.5;
if(Math.Abs(deltaX)>0.000000001)
{
angle=Math.Atan2(deltaY,deltaX);
}
if(angle<0)
{
angle+=Math.PI;
}
if(deltaY<0.0)
{
angle+=Math.PI;
}
*-
returnangle;
}
//计算距离
publicstaticdouble距离(doublex1,doubley1,doublex2,doubley2)
{
returnMath.Sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
}
}
a及每个左角,求每条边的M点的坐标方位角)在如图所示的支中导线,已知A点到4(0坐标方位角。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApplication
{
staticvoidMain(string[]args)
{
Console.Write(请输入A点到M点的坐标方位角尽);
//将A点到M点的坐标方位角换算为M点到A点的坐标方位角,以便利用公式
doublea0=DEG(double.Parse(Console.ReadLine())+180.0);
if(a0>2*Math.PI)
{
a0-=2*Math.PI;
}
List导线转角集合=newList();
inti=1;
do
{
Console.Write(请输入第{0}个转角的水平角[左角为正,右角为负]<直接回车结束输入?
i++);
.ReadLine();
Consolestr=string
*-
if(str!
=\)
{
导线转角集合.Add(DEG(double.Parse(str)));
}
else
{
break;
}
}while(true);
i=1;
foreach(doubleain导线转角集合)
{
a0+=a+Math.PI;
if(a0>2*Math.PI)
{
a0-=2*Math.PI;
}
elseif(a0<0.0)
{
a0+=2*Math.PI;
}
Console.WriteLine(第{0}条边的方位角为?
屽,i++,DMS(a0));
}
}
//将弧度转为ddd.mmss
staticpublicdoubleDMS(doubleang)
{
ang+=1.0E-15;//加上一个小量,以保证进位
intfuhao=(int)(ang/Math.Abs(ang));
ang=Math.Abs(ang)*180.0/Math.PI;
intd=(int)ang;
ang=(ang-d)*60.0;
intm=(int)ang;
doubles=(ang-m)*60.0;
return(d+m/100.0+s/10000.0)*fuhao;
}
//将ddd.mmss转为弧度
staticpublicdoubleDEG(doubleang