Azimuth




' X1#,Y1# = Longitudine e Latitudine del primo punto in gradi decimali

' X2#,Y2# = Longitudine e Latitudine del secondo punto in gradi decimali


Public Sub DistanzaAzimut(X1#, Y1#, X2#, Y2#, Dist&, Azim%)
Dim Xx1#, Xx2#, Yy1#, Yy2#
Dim azab#, tanbc1#, tanbc2#, poa#, pob#, cosaob#, apb#, _
rfm#, rterr#, sinf#, aob#

Xx1# = X1# * arcgrd
Xx2# = X2# * arcgrd
Yy1# = Y1# * arcgrd
Yy2# = Y2# * arcgrd
rfm = (Yy1# + Yy2#) / 2#
sinf = Sin(rfm)
rterr = C6 / (1 - Eq * sinf * sinf)

If (Abs(Xx1# - Xx2#) < arcsec) Then
If (Yy1# < Yy2#) Then
Azim = 0
Else
Azim = 180
End If
Dist = CInt(Abs(Yy2# - Yy1#) * rterr)
Else
apb = Abs(Xx2# - Xx1#)
poa = arc90 - Yy1#
pob = arc90 - Yy2#
cosaob = Cos(poa) * Cos(pob) + Sin(poa) * Sin(pob) * Cos(apb)
aob = Atn(-cosaob / Sqr(-cosaob * cosaob + 1)) + 2 * Atn(1)

Dist = CLng(aob * rterr)
tanbc1 = Atn(Cos((poa - pob) / 2#) / Cos((poa + pob) / 2#) _
* (1# / Tan(apb / 2#)))

tanbc2 = Atn(Sin((poa - pob) / 2#) / Sin((poa + pob) / 2#) _
* (1# / Tan(apb / 2#)))

azab = tanbc1 - tanbc2
If (Xx2# < Xx1#) Then
Azim = CInt((arc360 - azab) / arcgrd)
Else
Azim = CInt(azab / arcgrd)
End If
Azim = Azim Mod 360
End If
End Sub










( azimuth.html )- by Paolo Puglisi - Modifica del 17/12/2023