我想在VBA中计算atan2
,但我不确定该函数是否存在(甚至在哪里可以找到内置VBA函数的规范列表)。我没有使用Excel,因此无法进行工作表调用。
我自己可以implement atan2
,但如果可能,我宁愿避免这样做。
答案 0 :(得分:6)
要获取列表,请键入您的模块
VBA.Math
或使用对象浏览器。你会发现Atn和Tan等,但名单很短,不包括ATan2。
如果要添加对Excel库的引用,可以使用:
Excel.WorksheetFunction.Atan2
编辑:您可以从允许您添加对Excel库的引用的任何Office应用程序中调用Excel工作表函数。这并不意味着使用Excel或工作表,只是函数。
答案 1 :(得分:5)
正如MarkJ先前所指出的,当X <上述时,上述代码将失败。 0和y = 0。我相信以下内容会一直有效:
Function ArcTan2(X As Double, Y As Double) As Double
Private Const PI As Double = 3.14159265358979
Private Const PI_2 As Double = 1.5707963267949
Select Case X
Case Is > 0
ArcTan2 = Atn(Y / X)
Case Is < 0
ArcTan2 = Atn(Y / X) + PI * Sgn(Y)
If Y = 0 Then ArcTan2 = ArcTan2 + PI
Case Is = 0
ArcTan2 = PI_2 * Sgn(Y)
End Select
End Function
在x和y均为0的情况下,利用Sgn(0)返回0。
答案 2 :(得分:2)
也许这段代码适合你:
Private Const Pi As Double = 3.14159265358979
Public Function Atn2(y As Double, x As Double) As Double
If x > 0 Then
Atn2 = Atn(y / x)
ElseIf x < 0 Then
Atn2 = Sgn(y) * (Pi - Atn(Abs(y / x)))
ElseIf y = 0 Then
Atn2 = 0
Else
Atn2 = Sgn(y) * Pi / 2
End If
End Function