C 不明白为什么这部分代码是必需的吗?

C 不明白为什么这部分代码是必需的吗?,c,polar-coordinates,C,Polar Coordinates,下面是将笛卡尔坐标转换为极坐标的代码。 else if语句(y>0)=pi/2 else-pi/2。。。 这两条线的相关性是什么?当然你只需要θ=atan(y/x)和r=sqrt(x^2+y^2)来确定正确的θ和r? 当我进入调试并设置检查点以查看代码如何运行时,似乎也从未使用过此部分 有人能解释一下这些台词的相关性吗 谢谢 这是应用程序的代码 void cartesianToPolar (float x, float y, double *rPtr, double *thetaPtr)

下面是将笛卡尔坐标转换为极坐标的代码。 else if语句(y>0)=pi/2 else-pi/2。。。 这两条线的相关性是什么?当然你只需要θ=atan(y/x)和r=sqrt(x^2+y^2)来确定正确的θ和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;
}

如果x等于0,则该语句

theta = atan(y/x);

将用零除法除法

此测试在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;
    }
}

请考虑更改标签。里面没有太多的objective-c,而是标准的c,你可能想用“极坐标”来标记它。对不起,你说的c和objective-c相对是正确的。对,我认为它实际上是。所以这实际上是说。。。如果x==0,跳到else if(y>0)以防止代码吐出一个未定义的,因为任何被0除的东西都趋向于无穷大。让我困惑的是,我假设这在θ==0.0中得到了处理(因为这也是为了防止它趋向于无穷大)是的。当x==0时,您不能使用atan方法,但解决方案只是三个可能值中的一个(第一个,θ=0,有点特殊,因为这主要是一个约定)。很抱歉添加了大量注释-我现在完全理解了。我想,将来需要让我的代码更具可读性。不用担心。在您试图解释代码之前,一定要花时间(重新)缩进代码,这有助于避免许多错误。