测边交会

来源:互联网 发布:淘宝金牌卖家企业店铺 编辑:程序博客网 时间:2024/04/27 15:02

1计算公式    1

1.1 排列顺序    1

1.2 计算公式一    2

1.3 排列顺序的判定    3

1.4 计算公式二    3

2精度评定    6

2.1 几何推导    6

2.2 代数推导    7

 

 

1计算公式

如下图所示,已知AB点的坐标,通过测量APBP的长度即可求出点P的坐标。这种定位方法就是测边交会。

1.1 排列顺序

为了下面讨论的方便,引入变量sign,它的数值说明了ABP的排列顺序:ABP的排列顺序与方位角的增加方向一致时sign取值为1;否则sign取值为-1。下图是数学系,ABP为逆时针排列,与方位角的增加方向一致,因此sign1

图1.1

下图是测量系,ABP为顺时针排列,与方位角的增加方向一致,因此sign1

图1.2

1.2 计算公式一

下面的公式非常适合于编程:

验证上面公式的C代码如下:

srand(time(NULL));

double xA = rand();

double yA = rand();

double xB = rand();

double yB = rand();

double xP = rand();

double yP = rand();

double AP = _hypot(xA - xP,yA - yP);

double BP = _hypot(xB - xP,yB - yP);

double sign = 1.0;

if((yP - yA) * (xB - xA) - (xP - xA) * (yB - yA) < 0.0)

{//A,B,P与方位角增加方向相反。矢量AB叉乘矢量APz轴分量小于零

sign = -1.0;

}

double AB = _hypot(xA - xB,yA - yB);

double aAB = atan2(yB - yA,xB - xA);

double A = acos((AB*AB + AP*AP - BP*BP) / (2.0*AB*AP));

double XP = xA + AP * cos(aAB + A * sign);

double YP = yA + AP * sin(aAB + A * sign);

double deltaX = XP - xP;

double deltaY = YP - yP;

验证方法:deltaXdeltaY应该接近于零。

1.3 排列顺序的判定

1.4 计算公式二

 

整理一下,这套公式的计算步骤如下

验证上面公式的C代码如下:

srand(time(NULL));

double xA = rand();

double yA = rand();

double xB = rand();

double yB = rand();

double xP = rand();

double yP = rand();

double AP = _hypot(xA - xP,yA - yP);

double BP = _hypot(xB - xP,yB - yP);

double sign = 1.0;

if((yP - yA) * (xB - xA) - (xP - xA) * (yB - yA) < 0.0)

{//A,B,P与方位角增加方向相反。矢量AB叉乘矢量APz轴分量小于零

sign = -1.0;

}

double AB = _hypot(xA - xB,yA - yB);

double S4 = sqrt((AB + AP + BP) * (-AB + AP + BP) * (AB - AP + BP) * (AB + AP - BP));

double XP = (xA*(AB*AB+BP*BP-AP*AP)+xB*(AB*AB+AP*AP-BP*BP)+S4*sign*(yA-yB))/(2.0*AB*AB);

double YP = (yA*(AB*AB+BP*BP-AP*AP)+yB*(AB*AB+AP*AP-BP*BP)+S4*sign*(xB-xA))/(2.0*AB*AB);

double deltaX = XP - xP;

double deltaY = YP - yP;

验证方法:deltaXdeltaY应该接近于零。

 

 

2精度评定

2.1 几何推导

下面研究边长BP增加微小量dBP后,对P点位置的影响有多大?请参考下图。

图2.1

2.2 代数推导

0 0