数学

ヘロンの方式

三角形の3辺の長さから面積を計算するプログラムを解説します。計算には、ヘロンの公式を使います。

ヘロンの公式は、与えれれた三角形の3辺の長さから面積を計算する公式で、3角形の面積は、下図の式で計算することができます。a,b,cは、それぞれ辺の長さで、Tは面積です。

ヘロンの公式

Javaソースコード

Heron.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
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
public class Heron {
	public static void main( String[] args ) {
		// 変数の宣言
		double a, b, c;	// 3辺の長さ
		double t;	// 面積

		// 入力した引数が3つ以上かを調べる
		if ( 3 >args.length ) {
			// 入力した引数が3つ未満の場合、使用方法を表示する
			System.out.println( "Heron [辺長1]  [辺長2]  [辺長3]" );
			return;
		}

		// 引数をdouble型に変換し、長さに代入
		try {
			// args[0],args[1],args[2]を数値に変換
			a =  Double.valueOf( args[ 0 ] );
			b =  Double.valueOf( args[ 1 ] );
			c =  Double.valueOf( args[ 2 ] );
		}
		catch( NumberFormatException ne )
		{
			// args[0],args[1],args[2]のどれかが数字ではない
			System.out.println( "辺の長さの取得に失敗しました" );
			return;
		}
	

		// 面積を計算
		t = herons_formula( a, b, c );
		if ( 0.0 > t ) {
			System.out.println( "面積の計算に失敗しました" );
		}
		else {
			System.out.println( "辺1の長さ="+ a );
			System.out.println( "辺2の長さ="+ b );
			System.out.println( "辺3の長さ="+ c );
			System.out.println( "面積="+ t );
		}
	}


	// 3角形の3辺の長さa,b,cから面積を計算するメソッド
	private static double herons_formula( double a, double b, double c )
	{
		double s;	// s = ( a + b + c ) / 2
		double t;	// 面積
		double d;	// 作業用変数

		// 3辺のどれか1つでも0より小さければ-1.0を返す
		if ( ( 0.0 > a ) || ( 0.0 > b ) || ( 0.0 > c ) ) return -1.0;

		// sを計算
		s = ( a + b + c ) / 2.0;

		// s(s-a)(s-b)(s-c)を計算し、マイナスになれば-1.0を返す
		d = s * ( s - a ) * ( s - b ) * ( s - c );
		if ( 0.0 > d ) return -1.0;

		// 面積tを計算
		t = Math.sqrt( d );

		// 計算した面積tを返す
		return t;
	}
}

実行結果

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

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

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

C:\talavax\javasample>javac Heron.java

Heronを実行

C:\talavax\javasample>java Heron 5 12 9 
辺1の長さ=5.0
辺2の長さ=12.0
辺3の長さ=9.0
面積=20.396078054371138

3つの引数で渡した3辺の長さ5,12,9の面積を計算した結果が出力されます。

Javaソースコードの解説

ここからは、このソースコードを上から順番に解説していきます。

001
public class Heron {

クラス名を、Heronとしています。

002
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

003
004
005
		// 変数の宣言
		double a, b, c;	// 3辺の長さ
		double t;	// 面積

このプログラムで使う変数を宣言しています。

007
008
009
010
011
012
		// 入力した引数が3つ以上かを調べる
		if ( 3 >args.length ) {
			// 入力した引数が3つ未満の場合、使用方法を表示する
			System.out.println( "Heron [辺長1]  [辺長2]  [辺長3]" );
			return;
		}

3つ以上の引数が与えられたかをチェックし、足りたかった場合に、使い方のメッセージを表示し、returnによってmainメソッドを抜けています。

014
015
016
017
018
019
020
021
022
023
024
025
026
		// 引数をdouble型に変換し、長さに代入
		try {
			// args[0],args[1],args[2]を数値に変換
			a =  Double.valueOf( args[ 0 ] );
			b =  Double.valueOf( args[ 1 ] );
			c =  Double.valueOf( args[ 2 ] );
		}
		catch( NumberFormatException ne )
		{
			// args[0],args[1],args[2]のどれかが数字ではない
			System.out.println( "辺の長さの取得に失敗しました" );
			return;
		}

与えられた引数をそれぞれ、変数a,b,cに代入しています。

try { ~ } catchは、失敗する可能性がある処理を波括弧で囲み、その処理に失敗したときにcatch { ~ }の波括弧で囲まれた処理を実行するということです。この場合は、与えられた引数が数値でなかったり、doubleの範囲を超えた引数が与えられたことが原因で処理が失敗する可能性があります。処理が失敗するとreturnによってmainメソッドを抜けるようにしています。

029
030
031
032
033
034
035
036
037
038
039
		// 面積を計算
		t = herons_formula( a, b, c );
		if ( 0.0 > t ) {
			System.out.println( "面積の計算に失敗しました" );
		}
		else {
			System.out.println( "辺1の長さ="+ a );
			System.out.println( "辺2の長さ="+ b );
			System.out.println( "辺3の長さ="+ c );
			System.out.println( "面積="+ t );
		}

後で説明するherons_formulaメソッドに3辺の長さa,b,cを渡して面積を計算します。herons_formulaメソッド戻り値がマイナスの場合は、計算に失敗していることを表しているので、エラーメッセージを表示しています。面積計算に成功した場合は、メッセージを表示しています。

043
044
	// 3角形の3辺の長さa,b,cから面積を計算するメソッド
	private static double herons_formula( double a, double b, double c )

新しいメソッドherons_formulaメソッドを定義しています。double型変数a,b,cで3つの辺の長さを与え、double型面積を返すメソッドです。

046
047
048
		double s;	// s = ( a + b + c ) / 2
		double t;	// 面積
		double d;	// 作業用変数

面積計算で使う変数を宣言しています。

050
051
		// 3辺のどれか1つでも0より小さければ-1.0を返す
		if ( ( 0.0 > a ) || ( 0.0 > b ) || ( 0.0 > c ) ) return -1.0;

与えられた3つの引数のうち1つでも0.0より小さい場合は、エラーとして-1.0を返しています。

053
054
		// sを計算
		s = ( a + b + c ) / 2.0;

ヘロンの公式で使うsを計算しています。

056
057
058
		// s(s-a)(s-b)(s-c)を計算し、マイナスになれば-1.0を返す
		d = s * ( s - a ) * ( s - b ) * ( s - c );
		if ( 0.0 > d ) return -1.0;

s,a,b,cをヘロンの公式の平行根に渡す値dを計算しています。これは、平方根を計算するMath.sqrtメソッドにマイナスの値を渡さないようするためです。値がマイナスであれば-1.0を返すようにしています。

060
061
		// 面積tを計算
		t = Math.sqrt( d );

dの平方根を計算し、tに代入しています。このtの値が面積です。

Math.sqrtメソッド

public static double Math.sqrt( double a )
・引数aで指定した数値の平方根を返します。

  パラメータ a : 平方根を求める数値

  戻り値     aの平方根
063
064
		// 計算した面積tを返す
		return t;

計算した面積をtをreturnで戻して終了です。

以上です。

関連コンテンツ

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

2022.10.25

面積について詳しく解説しています。いろいろな図形の面積計算のリンク付き。

2019.10.7

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

2021.05.18

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

2020.03.23

三角形って何?

2022.07.26

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

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

2020.03.23

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

2020.03.20

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

2022.12.13

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

2020.03.23

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

2020.03.23

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

2020.03.23

底辺と高さを使った三角形の面積を計算する方法を説明しています。図を使って詳しく解説しています。

2020.03.23

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

2020.03.23

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

二等辺三角形の面積、周長、内角、等辺、頂角について説明しています。興味のある方は、記事をご覧ください。

2020.03.23

1つの辺の長さから正三角形の面積を求める式の導き方を説明しています。興味のある方は、記事をご覧ください。

2020.03.23

広告