Math.atan2() - X軸から対象点までの角度を計算する

投稿日:

JavaScriptのMathオブジェクトの関数、atan2の説明です。

説明

Mathオブジェクトのatan2()は、アークタンジェントを計算するメソッドです。第1引数にY座標、第2引数にX座標を指定して、角度(ラジアン単位)を取得します。計算できない場合、NaNが返ります。

atan2()は引数が違うだけで、中身はatan()と同じです。

項目引数の指定方法
Math.atan()比率を直接、指定する。
Math.atan2()第1引数にY座標、第2引数にX座標を指定する。Y÷Xの計算が比率となる。

atan2()を理解するには、その前提としてラジアン単位とタンジェント、アークタンジェントの知識が必要です。

ラジアン単位とは?

ラジアン単位
ラジアン単位

半径Aと円弧Bの長さが同じ場合の中心角の角度は約57.2958度です。この角度を1として数えるのがラジアン単位です。JavaScriptの三角関数では、角度はラジアン単位(rad)で表現されます。

ラジアン角度
1rad57.2958度
2rad114.592度
3rad171.887度
1π(3.14159...)rad180度

タンジェントとは?

直角三角形
直角三角形

タンジェントとは、直角三角形における隣辺Bの長さに対する対辺Cの長さの比率です。

タンジェント = 対辺Cの長さ ÷ 隣辺Bの長さ

例えば、タンジェント60度を考えてみます。角度θが60度の直角三角形の場合、比率は約1.732となります。隣辺Bが1cmの場合は、対辺Cが必ず√3cmになるということです。タンジェント60度(約1.0472rad)は比率1.732、というように表現します。

タンジェント60度 = 1 ÷ √3 = 1.732
負の比率
負の比率

負の比率があります。現実的には負の長さなどありませんが、円の中心を0,0という座標に見立てて三角形を反転させることで、そのように考えることができます。この時、対辺Cの長さはマイナスです。例えば、隣辺Bの長さが1、対辺Cの長さが-√3とすると、比率は-1.732です。この時の角度は-60度です。

タンジェント-60度 = 1 ÷ -√3 = -1.732

アークタンジェントとは?

アークタンジェントとは、タンジェントを逆算する式のことです。比率を指定して角度を求めます。先ほどの例なら、アークタンジェント1.732はタンジェント60度です。Math.atan(1.732)で取得できる数値はラジアン単位なので、約1.0472rad(60度)となります。比率から角度を求めるのが、アークタンジェントです。

// 比率から角度を求める ( → 約1.0472 )
var result = Math.atan( 1.732 ) ;

Math.atan2()とは?

Math.atan2()は引数の指定方法が違うだけで、中身はMath.atan()と同じです。先ほどの円の図を思い出して下さい。Math.atan2()は隣辺BをX座標、対辺CをY座標と見做して、第1引数にY座標、第2引数にX座標を指定します。

内部ではこの2つの引数をY÷Xという計算で比率に変換し、この比率でアークタンジェントの計算をします。例えば、先ほどのMath.atan()の例では1.732の比率を指定しましたね。それと同じ結果を得るためには、例えば、第1引数(Y座標)に1.732(≠√3)、第2引数(X座標)に1を指定します。すると、約1.0472rad(60度)を取得できるはずです。

// 比率から角度を求める ( → 約1.0472 )
var result = Math.atan2( 1.732, 1 ) ;

サンプルコード

// 計算対象の値
var y = 1.732 ;
var x = 1 ;

// メソッドで計算 ( → 1.0471975511965976 )
var result = Math.atan2( y, x ) ;

デモ

入力フォームに、Math.atan2()の引数となる数値を入力して下さい。計算結果が表示されます。

構文

number result = Math.atan2( y, x )

引数

項目説明
yY座標の数値。
xX座標の数値。

返り値

項目説明
resultラジアン単位で表現されたタンジェントの角度。取得できる数値は0.5π(-90度)〜0.5π(90度)の間。計算できない場合はNaNが返る。

関連項目