对为什么这部分代码是必要的感到困惑?

时间:2012-08-22 10:35:11

标签: c polar-coordinates

以下是从笛卡儿转换为极地合作的代码。 else if语句(y> 0)= pi / 2 else -pi / 2 ... 这两条线的相关性是什么?当然你只需要theta = atan(y / x)和r = sqrt(x ^ 2 + y ^ 2)来确定正确的theta和r? 当我进入调试并放置检查点以查看代码是如何运行时,似乎这部分也从未使用过...

有人可以了解一下这些界限的相关性吗?

感谢。

以下是该应用程序的代码;

    void cartesianToPolar (float x, float y, double *rPtr, double *thetaPtr)
{
    //store radius in supplied address - calc for r
    *rPtr = sqrt(x * x + y * y);

    //calc theta
    float theta;
    if (x == 0.0) {
        if (y== 0.0) {
            theta = 0.0;
        } else if ( y > 0){
        theta = M_PI_2;
    } else {
        theta = -M_PI_2;
    }
    }else{
        theta = atan(y/x);
    }
        //store theta in address
        *thetaPtr = theta;
    }
int main (int argc, const char * argv[])
{
    double pi = 3.14;
    double integerPart;
    double fractionPart;

    // Pass add of integerPart as argument
    fractionPart = modf(pi, &integerPart);
    // Find value stored in intpart
    printf("integerPart = %.0f, fractionPart = %.2f\n", integerPart, fractionPart);

    double x = 3.0;
    double y = -4.0;
    double radius;
    double angle;

    cartesianToPolar(x,y,&angle,&radius);
    printf("(%.2f, %.2f) becomes (%.2f radiants, %.2f)\n", x, y, radius, angle);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

当x == 0(在这种情况下你不能做y / x)时调用此测试,决定该点是向上还是向下(因此角度为PI / 2或-PI / 2) )。

也许你对坏的缩进感到困惑。它应该是:

if (x == 0.0) {
    if (y == 0.0) {
        theta = 0.0;
    } else if ( y > 0){
        theta = M_PI_2;
    } else {
        theta = -M_PI_2;
    }
}

答案 1 :(得分:0)

如果x等于0语句

theta = atan(y/x);

将抛出除零异常。