编写前方交会程序代码(前方交会流程图)

http://www.itjxue.com  2023-03-05 12:29  来源:未知  点击次数: 

解释前方交会,侧方交会,后方交会的异同

一、含义不同:

前方交会:如果已知A、B两点的坐标,为了计算未知点P的坐标,只要观测∠A和∠B即可。这种测定未知点P的平面坐标的方法称为前方交会。

侧方交会:若观测∠A和∠P或∠B和∠P,同样可以测定未知点P的平面坐标,这种方法称为侧方交会。

后方交会:若在未知点P上瞄准A、B、C三个已知点,测得∠α和∠β,也可确定未知点P的平面坐标,这种方法称为后方交会。

二、方法不同:

前方交会:在两个已知点以上分别对待定点相互进行水平角观测,并根据已知点的坐标及观测角值计算出待定点坐标的方法。

后方交会:在待定点上向至少三个已知点进行水平角观测,并根据三个已知点的坐标及两个水平角值计算待定点坐标的方法。

侧方交会:在一个已知点和一个待定点上分别对另一个已知点相互进行水平角观测,并根据已知点的坐标及观测角值计算出待定点坐标的方法。

关于sign,它的取值为+1或-1,具体要求为:

当 A、B、P 的排列顺序与方位角的增加方向一致时,它取值为1;

当 A、B、P 的排列顺序与方位角的增加方向相反时,它取值为-1。

更具体的说,就是:

测量坐标系下,A、B、P 顺时针排列时,sign=1;A、B、P 逆时针排列时,sign=-1。

数学坐标系下,A、B、P 逆时针排列时,sign=1;A、B、P 顺时针排列时,sign=-1。

以上内容参考:百度百科-前方交会

大坝水平位移前方交会法步骤

大坝水平位移前方交会法步骤如下:

指北针除能指示方位外,并可测量方位角兼可在现地测定水平距离及斜角度;在地图上测量直距离及弯曲距离及绘图时可描绘方向线;并以「前方交会法」判定目的地在地图上的位置;以「后方交会法」判定本人在地图上的位置。用途非常广泛。

前方交汇法:如果已知A、B两点的坐标,为了计算未知点P的坐标,只要观测∠A和∠B即可。这种测定未知点P的平面坐标的方法称为前方交会法。

交会法定点

当测区内已有的控制点密度不能满足要求,但需加密的控制点数量不多时,可采用交会法来加密控制点,称为交会定点。交会法主要有前方交会法、侧方交会法、后方交会法和边长交会法四种。

一、前方交会法

如图6-11,A,B,C为已知点,P为待定点,在三个已知点上观测水平角α1,β1,α2,β2。可用三角形Ⅰ,Ⅱ分两组解算P点的坐标。下面仅以Ⅰ组三角形(图6-12)为例,介绍P点坐标的计算方法。

图6-11 角度前方交会法

图6-12 角度前方交会坐标推算

1.公式推导

从图6-12可见

建筑工程测量

所以

建筑工程测量

上式整理可得

建筑工程测量

同理可得

建筑工程测量

2.计算实例

按(6-15),(6-16)式计算P点坐标的实例数据列入表6-5。表中系由三角形Ⅰ,Ⅱ两组计算P点坐标,若其较差符合表6-6的规定时,则取两组结果的平均值,作为P点的最后坐标。

表6-5 角度前方交会坐标计算表

注:在计算过程中,三角函数值应取七位小数。

表6-6 加密点两组坐标较差限差表

为了提高交会点的精度,在选定P点时,应尽可能使交会角γ近于90°,一般应不大于150°或不小于30°。

在应用(6-15),(6-16)式时,已知点和待求点必须按A,B,P逆时针方向编号,在A点观测角编号为α,在B点观测角编号为β。

二、侧方交会法

图6-13中,设一个已知点(例如B点)上不便安置仪器,而测出了α角和γ角,同样可以解算出待定点P的坐标,这种方法称为侧方交会法。计算时先由β=180°-(α+γ)求出β角,再按前方交会的方法计算P点的坐标。

图6-13 侧方交会法

图6-14 后方交会法

三、后方交会法

图6-14中,A,B,C为已知控制点,P为待定点。如果在P点安置仪器观测水平角α和β,根据3个已知点的坐标和α,β角即可计算出P点的坐标,这种方法称为后方交会法。

后方交会法的计算公式很多,这里仅介绍其中的一种计算方法。下面不加推证直接给出该种方法的计算步骤和计算公式。

(1)计算B点至P点的方位角正切值

建筑工程测量

(2)计算坐标增量

建筑工程测量

(3)计算P点坐标

建筑工程测量

图6-15 危险圆

按照以上步骤和公式计算时,点号的安排应与图6-14一致,即A,B,C,P点按逆时针方向排列,A,B间为α角,B,C间为β角。为了检核,实际工作中通常是观测4个已知点,每次用3个点,共组成两组后方交会,若两组坐标值的较差符合规定的要求,取其平均值作为P点的最后坐标。

采用后方交会法还应注意危险圆问题。如图6-15所示,若P点落在通过A,B,C三点的圆周上,则P点的位置无法确定,因为在这一圆周上的任意点与A,B,C组成的夹角α和β的值都相同,这个圆称为危险圆。在作后方交会时,应注意勿使P点位于危险圆附近。

四、边长交会法

图6-16中,A,B为已知控制点,P为待定点,若测量了边长a和b,根据A,B点的已知坐标及边长a,b通过计算即可求出P点坐标,这种方法称为边长交会法。随着电磁波测距仪的普及应用,边长交会法目前也成为常用的一种交会方法。

进行边长交会法计算时,其中一种方法是将边长交会化为前方交会。即根据△ABP的三边长度a,b,c(c为AB边长度,根据A,B点已知坐标计算),用余弦定律计算出三角形的两个内角α和β,再根据A,B点的已知坐标及所计算得的水平角α和β,用前方交会公式计算P点的坐标。

图6-16 边长交会法

图6-17 边长交会计算

也可根据边长测量值直接计算P点的坐标。如图6-17所示,作PH⊥AB,令PH=h,AH=f,则

a2-f2=h2-(c-f)2

整理得

建筑工程测量

AH,BH与AP边的坐标增量的关系为

建筑工程测量

式中:

ΔxAH=f·cosαAB

ΔyAH=f·sinαAB

ΔxHP=h·cos(αAB-90)=h·sinαAB

ΔyHP=h·sin(αAB-90)=h·cosαAB

因此AP边坐标增量

建筑工程测量

P点的坐标为

建筑工程测量

为了检核,实际工作中还需要再测量该点到第3个已知点的边长。

前方交会的角度前方交会

角度前方交会的计算公式如下:

上式虽然漂亮,但是并不适合于编写程序代码,因为角 A、B 可能会接近 0 或 180 度。编写程序时,可使用下式:

关于sign,它的取值为+1或-1,具体要求为:

当 A、B、P 的排列顺序与方位角的增加方向一致时,它取值为1;

当 A、B、P 的排列顺序与方位角的增加方向相反时,它取值为-1。

更具体的说,就是:

测量坐标系下,A、B、P 顺时针排列时,sign=1;A、B、P 逆时针排列时,sign=-1。

数学坐标系下,A、B、P 逆时针排列时,sign=1;A、B、P 顺时针排列时,sign=-1。

全站仪前方交会法测量方法

全站仪前方交会测量是指:将仪器架设在已知点上,通过测量角度或者距离来确定未知点。

已知条件A、B两点坐标分别为(xA,yA)、(xB,yB),求p点的坐标。

待求数据p点的坐标(Xp,Yp) 观测数据,为确定P点的位置,经纬仪分别安置A、B两点,用测回法观测∠A、∠B坐标计算,根据A、B两点的坐标和∠A、∠B,P点坐标为:

c#距离计算、角度转换、前方交会、距离交会程序

Program:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 测绘工程

{

class Program

{

static void Main(string[] args)

{

string a;

Console.WriteLine("1:距离计算");

Console.WriteLine("2:度、分、秒转换");

Console.WriteLine("3:度与弧度转换");

Console.WriteLine("4:前方交会");

Console.WriteLine("5:距离交会");

Console.WriteLine(" ");

a=Console.ReadLine();

switch (a)

{

case "1"://计算距离

Distance distance = new Distance();

Console.WriteLine("请输入第一个点位坐标:");

distance.X1 = Convert.ToDouble(Console.ReadLine());

distance.Y1 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个点位坐标:");

distance.X2 = Convert.ToDouble(Console.ReadLine());

distance.Y2 = Convert.ToDouble(Console.ReadLine());

distance.Calcu();

Console.ReadLine();

break;

case "2"://度、分、秒转换

zhuanhuan zhuanhuan = new zhuanhuan();

string b;

Console.WriteLine("1:度转换为分");

Console.WriteLine("2:度转换为秒");

Console.WriteLine("3:分转换为秒");

Console.WriteLine("4:分转换为度");

Console.WriteLine("5:秒转换为度");

Console.WriteLine("6:秒转换为分");

Console.WriteLine(" ");

b = Console.ReadLine();

switch(b)

{

case "1":

Console.WriteLine("度数:");

double dushu=Convert.ToDouble(Console.ReadLine());

zhuanhuan.A(dushu);

Console.WriteLine("转换后度数为:"+"{0:f4}"+"分",dushu);

Console.ReadLine();

break;

case "2":

Console.WriteLine("度数:");

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

dushu=(zhuanhuan.A(dushu));

dushu = (zhuanhuan.A(dushu));

Console.WriteLine("转换后度数为:" + "{0:f4}" + "秒", dushu);

Console.ReadLine();

break;

case "3":

Console.WriteLine("分:");

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

zhuanhuan.A(dushu);

Console.WriteLine("转换后度数为:" +"{0:f4}"+ "秒", dushu);

Console.ReadLine();

break;

case "4":

Console.WriteLine("分:");

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

dushu = (zhuanhuan.B(dushu));

Console.WriteLine("转换后度数为:" + "{0:f4}" + "度", dushu);

Console.ReadLine();

break;

case "5":

Console.WriteLine("秒:");

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

dushu = (zhuanhuan.B(dushu));

dushu = (zhuanhuan.B(dushu));

Console.WriteLine("转换后度数为:" + "{0:f4}" + "度",dushu);

Console.ReadLine();

break;

case "6":

Console.WriteLine("秒:");

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

dushu = (zhuanhuan.B(dushu));

Console.WriteLine("转换后度数为:" + "{0:f4}" + "分", dushu);

Console.ReadLine();

break;

}

break;

case "3":

{

string aa;

double bb;

huduzhi huduzhi = new huduzhi();

Console.WriteLine("1:角度制转换为弧度制");

Console.WriteLine("2:弧度制转换为角度制");

Console.WriteLine(" ");

aa = Console.ReadLine();

if (aa == "1")

{

Console.WriteLine("角度为:");

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

bb=huduzhi.A(bb);

Console.WriteLine("弧度为: "+"{0:f4}",bb);

Console.ReadLine();

}

if (aa == "2")

{

Console.WriteLine("弧度为:");

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

bb=huduzhi.B(bb);

Console.WriteLine("角度为: " + "{0:f4}", bb);

Console.ReadLine();

}

break;

}

case "4":

{

jiaohui jiaohui = new jiaohui();

Console.WriteLine("请输入第一个控制点X坐标:");

jiaohui.XA =Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第一个控制点Y坐标:");

jiaohui.YA =Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个控制点X坐标:");

jiaohui.XB =Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个控制点Y坐标:");

jiaohui.YB = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第一个观测方位角(弧度制):");

jiaohui.QBAP = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个观测方位角(弧度制):");

jiaohui.QPBA = Convert.ToDouble(Console.ReadLine());

jiaohui.qianfang();

}

break;

case "5":

{

julijiaohui julijiaohui = new julijiaohui();

Console.WriteLine("请输入第一个控制点X坐标:");

julijiaohui.XA = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第一个控制点Y坐标:");

julijiaohui.YA = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个控制点X坐标:");

julijiaohui.XB = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个控制点Y坐标:");

julijiaohui.YB = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第一个控制点与待求点距离:");

julijiaohui.DAP = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("请输入第二个控制与待求点距离:");

julijiaohui.DBP = Convert.ToDouble(Console.ReadLine());

julijiaohui.juli();

}

break;

}

}

}

}

(责任编辑:IT教学网)

更多

推荐Flash动画制作教程文章