2011-11-16 322 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