' 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 |