close
From: 互聯網

flash裡,反正切atan2函數比反正切atan函數(即角的對邊比鄰邊)更為有用,它可以讓我們做出對物體正確的旋轉.
請記住Flash裡的y軸坐標與數學的是顛倒的.(上面演示所示),Flash是以弧度來計算的!坐標上的刻度值位置不太準,沒校對大家就大概移到相應的點的位置上就可以驗證下面的列表值
atan(val:Number) atan2(y:Number,x:Number)

弧度角度換算公式:

弧度轉為角度
degree = radians * 180 / PI
角度轉為弧度
radians = degree * PI / 180

-------------------------------------------------- -------------------------------------------------- -----

atan2(Math.atan2 方法)

public static atan2(y:Number, x:Number) : Number

以弧度為單位計算並返回點y / x的角度,該角度從圓的x軸(0點在其上,0表示圓心)沿逆時針方向測量。返回值介於正pi 和負pi 之間。

可用性: ActionScript 1.0;Flash Player 5

x :Number -指定點的x坐標的數字。


-------------------------------------------------- -------------------------------------------------- -----


我們可以使用正切操作將角度轉變為斜率,那麼怎樣利用斜率來轉換為角度呢?可以利用斜率的反正切函數將他轉換為相應的角度.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


--------------------------------------------------


trace(Math.atan2(10, 0)); // output: 1.5707963267949 注意:很多人研究很久都搞不明白這個atan2(y,x)是什麼意思,其實很簡單: Q=180*(atan2(y,x)/Math.PI); Q為真實的角度,當y=x時,Q為45度,當x=0,y!=0時,Q為90度,符合幾何上的角度了。

arrow
arrow
    全站熱搜

    David 發表在 痞客邦 留言(3) 人氣()