Поскольку atan2 возвращает значения в диапазоне -π ... + π (то есть -180 ° ... + 180 °), нормализует результат для подшипника компаса (в диапазоне 0 ° ... 360 ° со значениями -ve, преобразованными в диапазон 180 ° ... 360 °), преобразуйте в градусы и затем используйте (θ + 360)% 360, где% - это модуль.
Выше пункта я нашел в сети. Я использую VB6, и мои коды выглядят так:
brng = (θ + 360) Мод 360
(где 0 = - 68) Я получаю ответ 292 °, но ожидаемый ответ - 248 °.
я совершаю ошибку ..? или я что то упускаю.? Пожалуйста, помогите мне.
Обновление:
Я еще объясню свой вопрос,
Dim b As Double
Dim x As Double
Dim y As Double
Dim Dlat As Double
Dim DLon As Double
Private Const pi As Double = 3.14159265358979
Public Function Atn2(ByVal y As Double, ByVal x As Double) As Double
On Error GoTo DivideError
Atn2 = Atn(y / x)
If (x < 0) Then
If (y < 0) Then Atn2 = Atn2 - vbPI Else Atn2 = Atn2 + vbPI
End If
Exit Function
DivideError:
If Abs(y) > Abs(x) Then 'Must be an overflow
If y > 0 Then Atn2 = vbPI / 2 Else Atn2 = -vbPI / 2
Else
Atn2 = 0 'Must be an underflow
End If
Resume Next
End Function
Public Sub AFAMP()
lat1 = Val(Text1.Text) * pi / 180 'conveting to radians
lat2 = Val(Text2.Text) * pi / 180
Long1 = Val(Text3.Text) * pi / 180
Long2 = Val(Text4.Text) * pi / 180
Dlat = (lat1 - lat2)
DLon = (Long1 - Long2)
y = Math.Sin(DLon) * Math.Cos(lat2)
x = Math.Cos(lat1) * Math.Sin(lat2) - Math.Sin(lat1) * Math.Cos(lat2) * Math.Cos(DLon)
b = Atn2(y, x) * (180 / pi)
Text5.Text = (b +360) mod 360
End Sub
координаты указаны ниже в десятичных градусах
lat1 = Val(7.337361) * pi / 180
lat2 = Val(7.000667) * pi / 180
Long1 = Val(81.626198) * pi / 180
Long2 = Val(80.773737) * pi / 180
Я проверил с помощью онлайн-калькулятора координат , ответ 248. В моем случае это 292 градуса. Кто-нибудь может мне помочь, пожалуйста! Я застрял.