ゆるゆるプログラミング

・逆三角関数 atan3

ここでは、xとyを引数として渡し、x軸からの反時計周り(左周り)の角度θ(ラジアン)を0~2πの値で戻すメソッドの作り方を説明します。下図は、xとyとθの関係を表したものです。

atan2

それでは、作り方を説明します。

Javaには、既にxとyからθを求めるMath.atan2メソッドが有ります。このメソッドは、yが0以上のときθを0~π、yが0未満のときθを-π~0の値を戻します。

Math.atan2メソッドはこちらを参照してください。「逆三角関数 atan2」

yが0以上の場合は、Math.atan2の戻り値はx軸からの反時計周りの角度なのでそのまま使います。yが0未満の場合、戻り値の角度が-π~0となるので、この値を反時計周りの角度に変換します。変換方法は簡単で、戻り値に2πを足すだけです。

以下のJavaソースコードのatan3メソッドが、xとyを引数として渡し、x軸からの反時計周り(左周り)の角度θ(ラジアン)を0~2πの値で戻すメソッドです。

Atan3Sample.java ← クリックしてダウンロードページに移動
001:    public class Atan3Sample {
002:    	// Math.atan2メソッドを利用し、角度の戻り値を0~2πにしたもの
003:    	private static double atan3( double y, double x )
004:    	{
005:    		// yが0以上の場合
006:    		if ( 0.0 <= y )
007:    			return Math.atan2( y, x );
008:    
009:    		// yが0未満の場合
010:    		return Math.atan2( y, x ) + 2.0 * Math.PI;
011:    	}
012:    
013:    
014:    	// メイン
015:    	public static void main(String[] args) {
016:    		// 右 0°(x軸上)
017:    		System.out.println( "x= 1, y= 0 : atan3=" + atan3(  0.0,  1.0 ) );
018:    
019:    		// 右上 45°
020:    		System.out.println( "x= 1, y= 1 : atan3=" + atan3(  1.0,  1.0 ) );
021:    
022:    		// 上 90°(y軸上)
023:    		System.out.println( "x= 0, y= 1 : atan3=" + atan3(  1.0,  0.0 ) );
024:    
025:    		// 左上 135°
026:    		System.out.println( "x=-1, y= 1 : atan3=" + atan3(  1.0, -1.0 ) );
027:    
028:    		// 右 180°(x軸上)
029:    		System.out.println( "x=-1, y= 0 : atan3=" + atan3(  0.0, -1.0 ) );
030:    
031:    		// 左下 225°
032:    		System.out.println( "x=-1, y=-1 : atan3=" + atan3( -1.0, -1.0 ) );
033:    
034:    		// 下 270°(y軸上)
035:    		System.out.println( "x= 0, y=-1 : atan3=" + atan3( -1.0,  0.0 ) );
036:    
037:    		// 右下 315°
038:    		System.out.println( "x= 1, y=-1 : atan3=" + atan3( -1.0,  1.0 ) );
039:    
040:    		// 原点(0,0)
041:    		System.out.println( "x= 0, y= 0 : atan3=" + atan3(  0.0,  0.0 ) );
042:    	}
043:    }

Atan3Sampleを実行

C:\talavax\javasample>java Atan3Sample

x軸上、y軸上、第1~4象限、原点座標の(x,y)に対して、atan3メソッドの結果を表示しています。

AtanSample3.javaの出力結果

x= 1, y= 0 : atan3=0.0
x= 1, y= 1 : atan3=0.7853981633974483
x= 0, y= 1 : atan3=1.5707963267948966
x=-1, y= 1 : atan3=2.356194490192345
x=-1, y= 0 : atan3=3.141592653589793
x=-1, y=-1 : atan3=3.9269908169872414
x= 0, y=-1 : atan3=4.71238898038469
x= 1, y=-1 : atan3=5.497787143782138
x= 0, y= 0 : atan3=0.0

x軸を基準に反時計周り(左周り)の角度(ラジアン)の値を返していることが確認できます。

■関連コンテンツ

逆三角関数 atan2 atan2の意味と、Math.atan2の使い方について解説
逆三角関数 atan atanの意味と、Math.atanの使い方について解説
円周率π(パイ) π(パイ)の意味と、Math.PIの使い方について解説
ラジアン←→角度 変換 角度、ラジアンの相互変換について解説
三角関数 sin sinの意味と、Math.sinの使い方について解説
三角関数 cos cosの意味と、Math.cosの使い方について解説
三角関数 tan tanの意味と、Math.tanの使い方について解説
逆三角関数 asin asinの意味と、Math.asinの使い方について解説
逆三角関数 acos acosの意味と、Math.acosの使い方について解説

■新着情報

2020.05.07 サイコロの出目確率 サイコロの目のでる確率は?
2020.04.22 現在日時をミリ秒で取得 現在日時をミリ秒数で取得
2020.04.22 日時 日時の操作について
2020.04.22 時間の単位変換 1日、1時間は何ミリ秒?

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ