C 不明白为什么这部分代码是必需的吗?
下面是将笛卡尔坐标转换为极坐标的代码。 else if语句(y>0)=pi/2 else-pi/2。。。 这两条线的相关性是什么?当然你只需要θ=atan(y/x)和r=sqrt(x^2+y^2)来确定正确的θ和r? 当我进入调试并设置检查点以查看代码如何运行时,似乎也从未使用过此部分 有人能解释一下这些台词的相关性吗 谢谢 这是应用程序的代码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)
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,有点特殊,因为这主要是一个约定)。很抱歉添加了大量注释-我现在完全理解了。我想,将来需要让我的代码更具可读性。不用担心。在您试图解释代码之前,一定要花时间(重新)缩进代码,这有助于避免许多错误。