坐标正算、反算计算方法及在Excel 中的VBA 编程
测量中经常需要将某点相对坐标系坐标转换成线路的里程、偏距,或根据线路某一里程偏距计算出对应的相对坐标系坐标,为寻求一种快速简单高效的计算方法,本文对线路正算反算的原理进行了阐述,并结合Excel VBA 编程,将编程和Excel 的拖拽的功能相结合,编制出实用计算表,特别适用于需要大量计算边桩、围护桩的情况。
关键词:坐标方位角坐标正算坐标反算 V AB 编程循环迭代直接算法
一、坐标方位角的反算
1.坐标方位角反算
如图1所示,已知点A 、B 的坐标,求直线AB
坐标方位角α。
图1坐标方位角反算
直线AB 之间的坐标增量:AB B A
AB B A
x x x y y y ∆=−∆=−当0,0AB AB x y ∆>∆>时,角α位于第一象限角:arctan AB
AB
y x α∆=∆当0,0AB AB x y ∆<∆>时,角α位于第二象限角:arctan 180AB AB
y x α∆=+°∆当0,0AB AB x y ∆<∆<;时,角α位于第三象限角:arctan 180AB AB
y x α∆=+°∆当0,0AB AB x y ∆>∆<;时,角α位于第二象限角:arctan
360AB AB y x α∆=+°∆2.坐标方位角反算的VBA 编程
可用VBA 将上述过程定义为一个名为angel()的函数,代码如下:
Function angel(x0As Double, y0 As Double, x1 As Double, y1 As Double) As Double        dx = x1- x0
dy = y1- y0
If dx > 0 And dy > 0 Then
angel = Atn(dy / dx)
End If
If dx < 0 And dy > 0 Then
angel = Atn(dy / dx) + 3.14159265358979
End If
If dx < 0 And dy < 0 Then
angel = Atn(dy / dx) + 3.14159265358979
End If
If dx > 0 And dy < 0 Then
angel = Atn(dy / dx) + 3.14159265358979 * 2
End If
End Function
二、直线段坐标正算与反算
1.
直线段正算
图2直线段计算
已知HZ 点坐标(x1,y1)、里程N HZ ,ZH 点坐标(x2,y2),正算时已知P 点对应的中桩里程Np 和偏距e (规定沿着线路前进方向,左边偏距为负,右边偏距为正),Np>N HZ ,求P 点对应的坐标。
由前面定义的坐标方位角反算函数,HZ 点至ZH 点的坐标方位角为:
(1,1,2,2)
angel x y x y α=P 点对应里程与ZH 点对应的里程差为:P HZ
D N N =−夹角β为:(0,0,,)
angel D e β=HZ 点至P 点的坐标方位角γ为:γαβ
=+HZ 点至P
点的距离为:L =则P 点对应的历程可以通过以下公式算出:11cos sin x x L y y L γ
γ=+
=+ 2.直线段反算
已知HZ 点坐标(x1,y1)、里程N HZ ,ZH 点坐标(x2,y2),反算时已知P 点坐标(,)x y ,求P 点对应的Np 和偏距e 。
HZ 点至ZH 点的坐标方位角为:(1,1,2,2)
angel x y x y α=HZ 点至P 点的坐标方位角为:(1,1,,)
angel x y x y γ=
HZ 点至P
点的距离为:L =
夹角β为:βγα=−则P 点对应的里程偏距可以通过以下公式算出:sin cos P HZ e L N N L β
β
=  =+ 因为直线段正算、反算在Excel 中只需定义一个angel()函数,其余计算可用Excel 中的公式编辑功能完成,故不需要其他VBA 代码。
三、曲线段坐标正算与反算
1.曲线段正算
由《铁道工程测量》,以ZH 点为原点,ZH 点至JD 点为X 轴,垂直于X 轴指向圆心方向为Y 轴,建立局部坐标系如图3
所示。
图3缓和曲线段局部坐标系
当点位于第一段缓和曲线段内偏距0e =时,其局部坐标系的坐标方程为:
29
2222003711335500040345633642240l l px l R l R l l l l py Rl R l R l  =−+    =−+  其局部坐标系下切线斜率方程为:20224
048l Rl py R l l ′=−其局部坐标系下切线方位角为:(0,0,1,)
angel py β′
=图4圆曲线段局部坐标系
如图4当点位于圆曲线段偏距0e =时,其局部坐标系的坐标方程为:
sin (1cos )px R m py R p
γγ=+  =−+ 上式中:00180l l R γβπ
−°=×+其局部坐标系下其切线方位角为:βγ
=当偏距0e ≠时,引入曲线转向因数ξ,当曲线左转时1ξ=−,当曲线右转时1ξ=。其局部坐标计算公式为: =    e sin  =  +    e cos ppx px ppy py ξβ
ξβ
图5引入曲线偏向因数后局部坐标的计算
局部坐标系下点的坐标计算出来后即可将其局部坐标转换为大地坐标,如图6
所示。
图6局部坐标转换为相对坐标系坐标
ZH 点至JD 点的坐标方位角:(,,,)
ZH ZH JD JD angel x y x y α=则将局部坐标系坐标转换为大地坐标的公式为:
cos sin sin sin ZH ZH X X ppx ppy Y Y ppx ppy αξααξα
=+⋅−⋅⋅  =+⋅+⋅⋅ 2.曲线段正算的VBA 编程
用VBA 将上述计算过程定义为名为acu()的函数,其代码如下:
Type outrlt
outrltx As Double
outrlty As Double
vba编程技巧
End Type
Function angel(x0 As Double, y0 As Double, x1 As Double, y1 As Double) As Double
dx = x1- x0
dy =y1- y0
If dx > 0 And dy > 0 Then
angel = Atn(dy / dx)
End If
If dx < 0 And dy > 0 Then
angel = Atn(dy / dx) + 3.14159265358979
End If
If dx < 0 And dy < 0 Then
angel = Atn(dy / dx) + 3.14159265358979
End If
If dx > 0And dy < 0 Then
angel = Atn(dy / dx) + 3.14159265358979 * 2
End If
End Function
'--------------------------------------正算函数
Function acu(ByVal zhx As Double, ByVal zhy As Double, ByVal jdx As Double, ByVal jdy As Double, ByVal zhlc As Double, ByVal a As Double, ByVal r As Double, ByVal l0 As Double, ByVal kesi As Integer, ByVal plc As Double, ByVal pe As Double) As outrlt
'定义变量
Dim Bo As Double: Dim D0 As Double: Dim m As Double: Dim p As Double:
Dim T As Double: Dim L As Double: Dim E0 As Double: Dim q As Double:
Dim hylc As Double: Dim qzlc As Double:
Dim yhlc As Double: Dim hzlc As Double:
Dim hzx As Double: Dim hzy As Double:
Dim dl As Double: Dim px As Double: Dim py As Double: Dim dsy As Double:
Dim dang As Double: Dim ang As Double: Dim ppx As Double:
Dim ppy As Double: Dim outx As Double: Dim outy As Double
Dim kesi2 As Double: Dim pe2 As Double: Dim ang2 As Double
'---------计算缓和曲线常素------------------------------------
B0 = l0 * 0.5 / r '--------缓和曲线切线角
D0 = l0 / (6 * r) '--------缓和曲线总偏角
m = l0 / 2- l0 * l0 * l0 / (240 * r * r)'---------切垂距
p = l0 * l0 / (24 * r)- (l0 ^ 4) / (2688 * r ^ 3) '---------缓和曲线内移量
T = m + (r + p) * Tan(a / 2) '---------切线长
L = l0 + r * a '---------曲线长
E0 = (r + p)/ Cos(a / 2)- r '---------外矢距
q = 2 * T- L '---------切曲差
'-------------------------------------------------------------
ang = angel(zhx, zhy, jdx, jdy)
hzx = jdx + T * Cos(ang+ kesi * a)
hzy = jdy + T * Sin(ang + kesi * a)
hylc = zhlc + l0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。