2011-11-16 160 views
0

由於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度。誰能幫幫我嗎?我卡住了。

+1

你爲什麼期待248? '-68 + 360 = 292'你似乎走錯了路。 – Deanna

+1

我假設你正在試圖計算兩點之間的方位。我不能確切地說出問題所在,但我發現了一些有希望的東西 - 如果我在該在線計算器中交換點1和點2,我會得到約68分的方位。請注意,68 + 292 = 360。也許你的問題只是在你的軸承定義中? – Justin

+0

請不要重複相同的問題,更新原件。我爲你做了這個。 – Kev

回答

0

正如迪安娜在評論中所言,292是正確的答案。 -68 + 360 = 292

+0

我也檢查過Google地球,正確的答案是248,但我無法理解真正的答案。 @凱夫 - 我只是在闡述我的問題。 感謝您以良好的方式編輯我的問題。 – user1047784