函数atan2
接受2个变量x
和y
,因此它可以返回2pi
而不是pi
范围的角度。但是,为什么tan2
从未与atan2
完全相反,并根据给定的角度返回2个值x
和y
?是否有一种更简单的方法来获得角度I的方向向量?
答案 0 :(得分:3)
深层原因可能是因为FORTRAN函数返回单个值。
确实,y= sin(x)
,x= cos(x)
就是您所需要的。 (或者,y= r * sin(x)
,x= r * cos(x)
允许您提供向量长度。)
这种缺乏对用户和实现者都是一种挫败感,因为同时需要这两个值是非常频繁的,而这样可以优化一些常见的计算。
答案 1 :(得分:3)
存在tan2剂量因为没有单一的x和y值满足tan(θ),因为tan是相邻的相对比率。
让我们说tan2确实存在 然后tan2(60°)将返回
opp=sqrt (3) & adj=1
因为tan(60°)= opp / adj = sqrt(3)
但它也可以返回
opp=3 & adj=sqrt (3)
这也等于sqrt(3);
由于tan是一个比率,它只返回一个值,即 相对于相邻的比率
而且在大多数编程语言中,函数只能返回一个值
答案 2 :(得分:2)
功能
t => { cos(t), sin(t) }
会是这样一个功能;但它不是atan2
的“逆”功能。
答案 3 :(得分:0)
如果同一sin(x)
同时需要cos(x)
和x
,并且想要有效地计算它,那么glibc中有一个GNU扩展:
void sincos(double x, double *sin, double *cos);
请参阅math.h
中的sincos()
。
更进一步,如果gcc认识到您需要sin(x)
和cos(x)
,但是以天真的方式计算它们,也就是说,通过2个函数调用,它将生成仅调用的代码sincos()
。我发现它非常整洁。