由于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