1. 程式人生 > >atan()與atan2()

atan()與atan2()

一段 來看 3.1 pri 傾斜 con tchar 有用 ble

Atan2 函數介紹 atan2
原型:extern float atan2(float y, float x);
用法:#include <math.h>
功能:求y/x(弧度表示)的反正切值
說明:值域為(-π/2,+π/2)。
舉例:atan

技術分享
 1 //atan2.c
 2 #include <syslib.h>
 3 #include <math.h>
 4 
 5 main()
 6 {
 7 float x,y;
 8 clrscr(); // clear screen
 9 textmode(0x00); // 6 lines per LCD screen
10 x=0.064;
11 y=0.2;
12 printf("atan2(%.3f,%.2f)=%.4f",y,x,atan2(y,x));
13 getchar();
14 return 0;
15 }
技術分享

原型:extern float atan(float x);
用法:#include <math.h>
功能:求x(弧度表示)的反正切值
說明:值域為(-π/2,+π/2)。
舉例:範例

技術分享
 1 // atan.c
 2 #include <syslib.h>
 3 #include <math.h>
 4 
 5 main()
 6 {
 7 float x;
 8 clrscr(); // clear screen
 9 textmode(0x00); // 6 lines per LCD screen
10 x=0.32;
11 printf("atan(%.2f)=%.4f",x,atan(x));
12 getchar();
13 return 0;
14 }
技術分享

本例使用Ata2 函數來返回原點正上方的點的反正切值。
Dim d as Double
Const PI=3.14159265358979323846264338327950

d=Atan2(1,0) //返回 1.57

d=Atan2(1,0)*180/PI //返回 90

我們可以使用正切操作將角度轉變為斜率,那麽怎樣利用斜率來轉換為角度呢?可以利用斜率的反正切函數將他轉換為相應的角度.as中有兩個函數可以計算反正切,我們來看一下.

1、as中Math.atan()

Math.atan()接受一個參數:用法如下:

angel=Math.atan(slope)

angel為一個角度的弧度值,slope為直線的斜率,是一個數字,這個數字可以是負的無窮大到正無窮大之間的任何一個值.

不過,利用他進行計算比較復雜.因為他的周期性,一個數字的反正切值不止一個.例如atan(-1)的值可能是45度,也可能是225度.這樣就是他的周期性,對於正切函數來說,他的周期是180度,所以兩個相差180度的角具有相同的正切和斜率:

tanθ=tan(θ+180)

然而,Math.atan()只能返回一個角度值,因此確定他的角度非常的復雜,而且,90度和270度的正切是無窮大,因為除數為零,我們也是比較難以處理的~!因此我們更多的會采用第二個函數.

2、Math.atan2()

Math.atan2()接受兩個參數x和y,方法如下:

angel=Math.atan2(y,x)

x 指定點的 x 坐標的數字。

y 指定點的 y 坐標的數字。

計算出來的結果angel是一個弧度值,也可以表示相對直角三角形對角的角,其中 x 是臨邊邊長,而 y 是對邊邊長。

下面我們來測試一下這兩個函數:

x=Math.atan(1) //計算正切值為1的數字對應的弧度值

trace(x) //輸出一個弧度值0.785398163397448

x=180*x/Math.PI //轉換為角度值

trace(x) //輸出45

x=Math.atan2(7,7)

trace(x) //輸出0.785398163397448

x=180*x/Math.PI //轉換為角度值

trace(x) //輸出45

x=Math.atan2(7,-7)

trace(x)//2.35619449019234

x=180*x/Math.PI //轉換為角度值

trace(x)135

x=Math.atan2(-7,7)

trace(x) //輸出-0.785398163397448

x=180*x/Math.PI //轉換為角度值

trace(x) //輸出-45

x=Math.atan2(-7,-7)

trace(x) //輸出-2.35619449019234

x=180*x/Math.PI //轉換為角度值

trace(x) //輸出-135

//從這些測試可以看出,通過坐標系的自動調整,我們可以很自由的計算出處於不同象限的位置相對應的角度.

3、計算兩點間連線的傾斜角.

這種方法非常的有用.

Math.atan2()函數返回點(x,y)和原點(0,0)之間直線的傾斜角.那麽如何計算任意兩點間直線的傾斜角呢?只需要將兩點x,y坐標分別相減得到一個新的點(x2-x1,y2-y1).然後利用他求出角度就可以了.使用下面的一個轉換可以實現計算出兩點間連線的夾角.Math.atan2(y2-y1,x2-x1)

不過這樣我們得到的是一個弧度值,在一般情況下我們需要把它轉換為一個角度.

下面我們用一段代碼來測試一下這樣的轉換.

//測試,計算點(3,3)和(5,5)構成的連線的夾角

x=Math.atan2(5-3,5-3)

trace(x)//輸出0.785398163397448

x=x*180/Math.PI//轉換為角度

trace(x)//輸出45

atan()與atan2()