●解説
原点と(x, y)座標を結ぶ直線がx軸と成す角度を計算するには、Math.atan2()メソッドを使います(図01-02-001)。このメソッドで注意する点は、ふたつあります。第1は、引数に渡す座標は、y、xの順番です。第2に、戻り値の角度はラジアン値になります。度数が必要なときは、値を変換しなければなりません。
→関連項目
「ラジアンと度数を変換したい」
図01-02-001■OPとx軸との成す角θを求める【01_02_Math_atan2_001.png】
Mathクラス |
パッケージ
|
トップレベル
|
継承
|
Math→Object
|
atan2()メソッド |
ASタイプ
|
M |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
Math.atan2(y:Number, x:Number):Number
|
意味
|
指定された位置座標までの角度をラジアン値で返します。
|
引数
|
x:Number ― 角度を求める位置の水平座標値。
y:Number ― 角度を求める位置の水平座標値。
|
戻り値
|
引数に指定された位置の角度を表すラジアン値。
|
たとえば、y軸上の点(0, 1)の角度をつぎのように調べると、ラジアン値π/2(= 90度)に相当する数値が[出力]パネルに表示されます。
trace(Math.atan2(1, 0)); // 出力: 1.5707963267948966
|
○記述例
以下のスクリプト01-02-001をMovieClipシンボルのフレームアクションに設定すると、インスタンスがマウスポインタの方向に減速しながら回転します(図01-02-002)。DisplayObject.enterFrameイベント(定数Event.ENTER_FRAME)のリスナー関数xRotate()では、マウスポインタのxy座標値をMath.atan2()メソッドに渡し、その戻り値を度数に変換したうえで、DisplayObject.rotationプロパティに設定しています。
スクリプト01-02-001■インスタンスをマウスポインタの方向に減速しながら回転させる
// フレームアクション
// MovieClip: マウスポインタを追って回転するインスタンス
var nRadianToDegree:Number = 180 / Math.PI;
var nDeceleration:Number = 0.2;
addEventListener(Event.ENTER_FRAME, xRotate);
function xRotate(eventObject:Event):void {
var nRadian:Number = Math.atan2(mouseY, mouseX);
var nDegree:Number = nRadian * nRadianToDegree;
rotation += nDegree * nDeceleration;
}
|
図01-02-002■インスタンスがマウスポインタを追いかけて回転する【01_02_Math_atan2_002.png】
※プロパティ値をイーズアウト(減速しながら変化)させる
上記スクリプト01-02-001でインスタンスの角度を変化させたように、プロパティ値を減速しながら目標値に近づけるには、つぎのような計算式を用います。なお、減速しながら目標値に近づくアニメーション表現を「イーズアウト」と呼びます。
プロパティ += インスタンスから見た目標値 * 減速率
ただし、0 < 減速率 < 1とします。
|
|
作成者: 野中文雄
ドラフト作成: 2009年5月12日