[英]Little bit confused about the math behind this function
因此,我一直在研究將笛卡爾坐標轉換為極坐標的函數以及if語句, if x == 0 and y>0 then theta == pi/2
。
但是,如果要計算θ,則只需遵循以下形式:
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;
}
關鍵是atan是tan的倒數,而tan實際上在某些點上會生成無限值,這是一張圖片:
該代碼捕獲了將無窮大的參數輸入atan並返回產生無窮大的角度的情況(+/- pi / 2分別給出了正無窮大或負無窮大)。
通常公認的方法是僅使用atan2
函數。
該代碼假設任何正數除以零就是正無窮大,而任何負數除以零就是負無窮大。 特殊情況下是因為用零除對C語言沒有任何幫助。 正和負無窮大的反正切分別為π/ 2和-π/ 2。
始終為pi / 2或-pi / 2的原因是由於極坐標的定義。 極點由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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.