据我理解,atan2()
函数存在于编程语言中,因为atan()
本身并不总是确定正确的θ,因为输出被限制在-pi/2到pi/2。
如果是这样的话,那么同样的问题同样适用于asin()
和acos()
,它们都有受限的范围,那么为什么没有asin2()
和acos2()
函数呢?
发布于 2015-03-17 09:44:52
首先,注意两个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
坐标和低值,你知道角度的余弦,但你不能知道y
值的符号。
因此,asin2
和acos2
在数学上是不可行的,至少在一个明显的方面是不可行的。如果你有某种符号编码到低水平,事情可能是不同的,但我想不出任何情况,这样的迹象会自然出现。
发布于 2020-04-13 08:19:52
因为asin(y,x)
acos(y,x)
每个参数都与atan(y,x)
相同,并且每个参数都给出了相同的答案。每个函数都是同样有效的,但我们只需要一个这样的函数。
不明确的原因来自于( atan2)的名字。它是一个函数,given x and y, computes the angle
(由从原点到这一点的一条线)具有(正)x轴。可以说,像angle_from(x,y)
这样的名字更合适。
发布于 2019-03-07 02:24:38
有时像"acos2“这样的函数是需要的,例如在3D空间中执行向量旋转时。在这种情况下,我对我自己的acos2函数进行了硬编码,它只执行以下检查:
x_perp=sqrt(x*x+y*y)
r=sqrt(x*x+y*y+z*z)
if(x_perp.gt.0.0d0) then
phi=acos(x/x_perp)
else
phi=0.0d0
endif
if(y.lt.0.0d0) phi=2.0d0*pi-phi
theta=acos(z/r)
其中θ和phi是通常的球面坐标,x,y,z是笛卡尔坐标。当y为负值时,需要在phi中发生相移。θ不存在这样的问题。
https://stackoverflow.com/questions/29094261
复制相似问题