为什么从来没有tan2?

时间:2014-03-31 09:38:33

标签: math

函数atan2接受2个变量xy,因此它可以返回2pi而不是pi范围的角度。但是,为什么tan2从未与atan2完全相反,并根据给定的角度返回2个值xy?是否有一种更简单的方法来获得角度I的方向向量?

4 个答案:

答案 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()。我发现它非常整洁。