根据我的理解,编程语言中存在 atan2()
函数,因为 atan()
本身无法始终确定正确的 theta,因为输出仅限于 -pi/2 至 pi/2。
如果是这种情况,那么同样的问题也适用于 asin()
和 acos()
,它们也都有范围限制,那么为什么没有 asin2()
和 acos2()
函数吗?
最佳答案
首先,请注意两个 arctan 函数的语法是 atan(y/x)
和 atan2(y, x)
。这种区别很重要,因为通过不执行除法,您可以提供附加信息,最重要的是 x
和 y
的各个符号。如果您知道各个 x
和 y
坐标,则可以找到 atan
函数的特定解(即考虑了(x,y)
所在的象限)。
如果从 tan(θ) = y/x
变为 sin(θ) = y/sqrt(x²+y²)
,则逆运算 asin
接受 y
和 sqrt(x²+y²)
并将其组合以获得有关角度的一些信息。在这里,我们自己执行除法还是让某个假设的 asin2
函数处理它并不重要。分母始终为正,因此除法后的参数包含的信息与单独的分子和分母包含的信息一样多。 (至少在 IEEE 环境中,除以零会得到正确签名的无穷大。)
如果您知道y
坐标和斜边sqrt(x²+y²)
,那么您就知道角度的正弦,但您无法知道角度本身,因为您无法区分负x
值和正x
值。同样,如果您知道 x
坐标和斜边,您就知道角度的余弦,但无法知道 y
值的符号。
所以 asin2
和 acos2
在数学上是不可行的,至少不是以明显的方式。如果你将某种符号编码到假设中,情况可能会有所不同,但我想不出这种符号会自然出现的情况。
关于function - 为什么没有类似于atan2()的asin2()和acos2()函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29094261/