方位角的計算方法有多種,根據公式與工具有不同,現有四種計算方法:
一、測量教材上的計算方法,需要判斷象限,對了解原理有一定幫助,但在實際工作中不太實用,在此不予介紹,使用此方法計算的VB或VBA代碼如下:
Public Const PI = 3.14159265359
Function Pol(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double '計算直線的方位角
Dim Sub_y As Double
Sub_y = Abs(y2 - y1)
If Sub_y = 0 Then
Sub_y = 0.0000000001
End If
Pol = Atn((Abs(x2 - x1)) / Sub_y)
If x2 > x1 And y2 >= y1 Then '0-90
ElseIf x2 < x1 And y2 <= y1 Then '180-270
Pol = PI + Pol
ElseIf x2 < x1 And y2 >= y1 Then '270-360
Pol = 2 * PI - Pol
ElseIf x2 >= x1 And y2 <= y1 Then '90-180
Pol = PI - Pol
End If
End Function
二、計算器上的pol()函數,用pol(dx,dy)計算,返回兩點間距離與方位角,如角度值為負+360即可,具體使用方法參照說明書上的pol()函數介紹;
三、方位角通用萬能公式:
此萬能公式的VB或VBA代碼如下:
Public Const PI = 3.14159265359
Function Pol(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double '計算直線的方位角
Dim Sub_x As Double
Sub_x = x2 - x1 + 0.0000000001
Pol = PI - Sgn(Sub_x) * PI / 2 - Atn((y2 - y1) / Sub_x)
End Function
sgn()函數為符號函數:
sgn(x)的值只有三個:
當x小於0時sgn(x)的值為-1
當x大於0時sgn(x)的值為1
當x等於0時sgn(x)的值為0
計算器上沒有此函數,在編程時可用下列代碼實現此函數功能:
if x<0 then
sgn(x)=-1
elseif x>0 then
sgn(x)=1
esle
sgn(x)=0
end if
四、另一個通用公式:
S12=sqr( (x2-x1)2+(y2-y1)2)= sqr(△x2+△y2)
A12=arcsin((y2-y1)/S12)
S12為測站點1至放樣點2的距離;
A12為測站點1至放樣點2的坐標方位角。
x1,y1為測站點坐標;
x2,y2為放樣點坐標。
按公式A12=arcsin((y2-y1)/S12)計算出的方位角都要進行象限判斷後加常數才是真正的方位角。
新計算公式為:
A12=arccos(△x/S12)*sgn(△y)+360°
式中sgn()為取符號函數,改公式只需加上條件(A12>360°, A12= A12-360°)就可以計算出坐標方位角,不需要進行象限判斷。
以下公式要注意如果△Yab=0,則應該把△Yab加上一個很小的數即可解決,通常編程時把△Yab+1E-10就可以,不影響方位角精度。特別說明一點,用此公式計算的值若小於0則加上360度就可得出方位角,不用判斷邊所在的象限。