Visual Basic, ATN2 преобразование в компас подшипник - PullRequest
0 голосов
/ 16 ноября 2011

Поскольку 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 градуса. Кто-нибудь может мне помочь, пожалуйста! Я застрял.

1 Ответ

0 голосов
/ 17 ноября 2011

Как сказала Дина в комментарии, 292 - правильный ответ. -68 + 360 = 292

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...