对这个功能背后的数学有点困惑

时间:2014-08-21 15:05:56

标签: c math

所以我一直在研究这个将笛卡尔坐标转换为极性的函数和if if x == 0 and y>0 then theta == pi/2的if语句。

然而,如果想要计算theta,它只需遵循以下形式:

theta = atan(y/x).

令我感到困惑的是,如果x == 0此功能立即未定义?因为你除以0,这应该倾向于无限吗?

那么在这个函数中如何表明如果x ==0 and y>0它总是等于pi / 2?

这可能是如此基本,我只是让方式变得复杂......

提前致谢。

void carttopolar(float x, float y, double *radptr, double *thetaptr){
    float theta;
    *radptr = sqrt(x * x + y * y);
    if(x==0){
        if(y==0){
            theta = 0.0;
        }
        else if(y>0){
            theta = M_PI_2;
        }
        else{
            theta = -M_PI_2;
        }
    }
    else{
        theta = atan(y/x);
    }
    *thetaptr = theta;
}

3 个答案:

答案 0 :(得分:4)

关键是atan是tan的倒数,tan实际上在某些点生成无限值,这里是一张图片:
a picture

代码正在捕捉你将无限参数输入atan并返回给无穷大的角度的情况(+/- pi / 2分别给出正或负无穷大)。

普遍接受的方法是仅使用atan2函数。

答案 1 :(得分:2)

此代码假设任何正数除以零是正无穷大,任何负数除以零都是负无穷大。特殊情况这些因为除以零并没有在C. The arctangent of positive and negative infinity are π/2 and -π/2, respectively.

中做任何有用的事情

答案 2 :(得分:0)

始终是pi / 2或-pi / 2背后的原因是因为Polar坐标的定义。极性点由P(r,Phi)描述。因此,如果X为0(并且y!= 0),则唯一的可能性是90°和270°=> PI / 2和-PI / 2

Y轴上的距离由'r'

定义

另见: http://en.wikipedia.org/wiki/File:Polar_graph_paper.svg

::编辑::

补充说:“和y!= 0”,ty chux