由於atan2返回範圍-π... +π(即-180°... + 180°)中的值,將結果歸一化爲羅盤方位(in範圍0°... 360°,其中-ve值轉換爲180°... 360°範圍),轉換爲度數然後使用(θ+ 360)%360,其中%爲模。Visual basic,atn2轉換爲羅盤方位
以上第我發現通過使用net.i'm VB6和我的代碼是這樣
方位角=(θ+ 360)模360
(其中,0 = - 68)I」得到答案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
我曾與一個online coordinate calculator檢查,答案是248.在我的情況是292度。誰能幫幫我嗎?我卡住了。
你爲什麼期待248? '-68 + 360 = 292'你似乎走錯了路。 – Deanna
我假設你正在試圖計算兩點之間的方位。我不能確切地說出問題所在,但我發現了一些有希望的東西 - 如果我在該在線計算器中交換點1和點2,我會得到約68分的方位。請注意,68 + 292 = 360。也許你的問題只是在你的軸承定義中? – Justin
請不要重複相同的問題,更新原件。我爲你做了這個。 – Kev