簡體   English   中英

對該函數背后的數學有點困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM