サイトトップ

Director Flash 書籍 業務内容 プロフィール

Flash ActionScript 3.0 Reference

◎01 Mathクラス

☆02 ★座標から角度を求めたい

解説
原点と(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日


Copyright © 2001-2009 Fumio Nonaka.  All rights reserved.