所以我一直在研究这个将笛卡尔坐标转换为极性的函数和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;
}
答案 0 :(得分:4)
关键是atan是tan的倒数,tan实际上在某些点生成无限值,这里是一张图片:
代码正在捕捉你将无限参数输入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