2024.5.16

tan(タンジェント)

tan(タンジェント)

はじめに

ここでは、Math.tanメソッドを使わずに、Math.cosメソッドMath.sinメソッドを使ってtanθを計算する方法を解説します。

Math.cosMath.sinメソッドの仕様は以下のとおりで、角度ラジアンで渡すとそれぞれの値が戻ってきます。

Math.sinメソッド

public static double Math.sin( double a )
・引数aで指定した角度の正弦 (サイン) を返します。

  パラメータ a : ラジアンで指定した角度。

  戻り値    aの正弦

Math.cosメソッド

public static double Math.cos( double a )
・引数aで指定した角度の余弦 (コサイン) を返します。

  パラメータ a : ラジアンで指定した角度。

  戻り値    aの余弦

sinθとcosθを使ってtanθを求める方法

tan(タンジェント)は、単位円(半径1)の周上の任意の点(x,y)との中心を結んだ直線の傾きです。

x軸からこの直線角度θの場合、直線の傾きはtanθです。θx軸からの反時計回り(左周り)の角度ラジアン)です。

直線の傾きは、(yの増加分)÷(xの増加分)で計算できます。

下の図から、原点(0,0)と任意の点(x,y)を結んだ直線の(yの増加分)はsinθ、(xの増加分)はcosθであることが分かります。

よって、直線の傾きであるtanθは、(yの増加分)÷(xの増加分)sinθ÷cosθで計算できます。

tan

ここで、tanθが計算できない場合について説明します。

tanθ=sinθ÷cosθであるので、cosθ=0(ゼロ)の場合は計算できません。

プログラムを作成する際は、cosθ絶対値が0(ゼロ)に近い場合は、計算をしないようにする必要があります。

Javaソースコード- tan計算

以下は、Math.sinメソッドMath.cosメソッドを使ってtanを計算するソースコードです。

0°から90°まで15°おきにtanを計算します。

Tangent.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
public class Tangent {
	// tan計算メソッド
	public static double tan( double deg )
	{
		// 度degをラジアンradに変換
		double rad = Math.toRadians( deg );

		// cosを計算
		double c = Math.cos( rad );

		// sinを計算
		double s = Math.sin( rad );

		// tanを計算
		double t = s / c;

		// tanを戻す
		return t;		
	}


	// mainメソッド
	public static void main( String[] args ) {
		// 0°のtan
		System.out.println( tan(  0.0 ) );

		// 15°のtan
		System.out.println( tan( 15.0 ) );

		// 30°のtan
		System.out.println( tan( 30.0 ) );

		// 45°のtan
		System.out.println( tan( 45.0 ) );

		// 60°のtan
		System.out.println( tan( 60.0 ) );

		// 75°のtan
		System.out.println( tan( 75.0 ) );

		// 90°のtan
		System.out.println( tan( 90.0 ) );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Tangent.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Tangent.java

実行

C:\talavax\javasample>java Tangent
0.0
0.2679491924311227
0.5773502691896256
0.9999999999999999
1.7320508075688767
3.7320508075688776
1.633123935319537E16

出力結果の最後の行はtan90°を計算した結果で「1.633123935319537E16」になりました。

最後の「E16」は数字を指数表記で表したもので10の16乗を表しています。

よって、最後の行の結果は、1.633123935319537×(10の16乗)です。

理論上、tan90°は(無限大)になりますが、このプログラムを実行した結果は「1.633123935319537E16」です。

Math.cosメソッドで扱う引数角度の単位はラジアンです。このソースコードではMath.toRadiansメソッドを使って単位°の角度ラジアンに変換した値を引数としています。

Math.toRadiansメソッド

public static double Math.toRadians( double a )
・引数aで指定した角度をラジアンに変換した値を返します。

  パラメータ a : 角度(単位:度)[

  戻り値    ラジアン

このメソッドを使って90°をラジアンに変換した値は、π/4に近い値になりますが、double型に格納できる精度以上の値を持つことはできません。

このソースコードの場合は、π/4の近似値でtanを計算したことになるので、tan90°が無限大になりません。

Javaソースコード- cos計算

以下は、Math.cosメソッドcosを計算するソースコードです。

0°から90°まで15°おきにcosを計算します。

Cosine.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
public class Cosine {
	// cos計算メソッド
	public static double cos( double deg )
	{
		// 度degをラジアンradに変換
		double rad = Math.toRadians( deg );

		// cosを計算
		double c = Math.cos( rad );

		// cosを戻す
		return c;		
	}


	// mainメソッド
	public static void main( String[] args ) {
		// 0°のtan
		System.out.println( cos(  0.0 ) );

		// 15°のtan
		System.out.println( cos( 15.0 ) );

		// 30°のtan
		System.out.println( cos( 30.0 ) );

		// 45°のtan
		System.out.println( cos( 45.0 ) );

		// 60°のtan
		System.out.println( cos( 60.0 ) );

		// 75°のtan
		System.out.println( cos( 75.0 ) );

		// 90°のtan
		System.out.println( cos( 90.0 ) );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Cosine.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Cosine.java

実行

C:\talavax\javasample>java Cosine
1.0
0.9659258262890683
0.8660254037844387
0.7071067811865476
0.5000000000000001
0.25881904510252074
6.123233995736766E-17

出力結果の最後の行はcos90°を計算した結果で「6.123233995736766E-17」になりました。

最後の「E-17」は数字を指数表記で表したもので10の-17乗を表しています。

よって、最後の行の結果は、6.123233995736766×(10の-17乗)です。

この値は、0に近い値ですが、割り算を行ってエラーになるほど0に近い値ではありません。

したがって、tan90°をsin90°÷cos90°で計算しても無限大になりません。

以上です。

関連コンテンツ

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

sin(サイン)の意味と、Math.sinメソッドの使い方をソースコードを使って詳しく解説しています。

2020.03.23

cos(コサイン)の意味と、Math.cosメソッドの使い方をソースコードを使って詳しく解説しています。

2020.03.23

tan(タンジェント)の意味と、Math.tanメソッドの使い方を解説しています。

2020.03.23

逆正接 atanと、Math.atanメソッドの使い方をソースコードを使って詳しく解説しています。

2016.02.21

逆正弦 asinと、Math.asinメソッドの使い方をソースコードを使って詳しく解説しています。

2016.01.07

逆余弦 acosと、Math.acosメソッドの使い方をソースコードを使って詳しく解説しています。

2016.01.07

与えられた任意の角度を0°から360°に収めるメソッドの作り方を説明します。

2016.02.21

0から90°のsin(x)、sin(x)の表を作成する方法をソースコードを使って詳しく解説しています。

2022.09.24

0から90°のsin(x)、sin(x)、tan(x)の表を作成する方法をソースコードを使って詳しく解説しています。

2022.09.24

0から359°のsin(x)、sin(x)、tan(x)の表を作成する方法をソースコードを使って詳しく解説しています。

2022.09.24

Math.sinメソッド、Math.cosメソッドを使わない計算方法を詳しく解説します。

2017.08.09

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

国際単位系における角度の単位のラジアンについて説明しています。興味のある方は、記事をご覧ください。

2016.01.26

単位円の意味をくわしく解説しています。

2020.03.23

円の直径と半径について図を使って詳しく解説しています。

2020.03.23

平面上の位置を表す座標系の1つXY座標系について詳しく解説。

2020.03.23

絶対値の意味と、Math.absメソッドの使い方をソースコードを使って詳しく解説しています。

2020.03.23

指数表記は、非常に大きな数値や、0に近い小さい数値を表現するときに使われる表記方法の1つです。興味のある方は、記事をご覧ください。

2020.03.23

計算の結果が∞となるときの表現方法について解説しています。

2016.02.15

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

円周率、πってどうゆう意味?

2020.03.23

Javaの演算子'/'を使って割り算を行った結果と注意点などについて説明。

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告