0

以下は、デカルト座標から極座標に変換するコードです。else if ステートメント (y>0) = pi/2 else -pi/2 ... これら 2 行の関連性は何ですか? 確かに、正しい theta と r を決定するには、theta = atan(y/x) と r = sqrt(x^2 + y^2) だけが必要ですか? デバッグに入ってチェックポイントを置いてコードがどのように実行されているかを確認すると、この部分も使用されていないようです...

誰かがこれらの行の関連性に光を当てることができますか?

ありがとう。

アプリケーションのコードは次のとおりです。

    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;
}
4

2 に答える 2

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;
    }
}
于 2012-08-22T10:40:14.437 に答える
0

x が 0 の場合、ステートメント

theta = atan(y/x);

ゼロ例外による除算をスローします。

于 2012-08-22T10:39:17.283 に答える