ゆるゆるプログラミング

・中点

中点とは、2つの座標の真ん中の座標のことです。

2次元座標の場合、与えられた2つの座標をそれぞれ(x1,y1)、(x2,y2)とすると中点の座標(mx,my)は、mx=(x1+x2)/2my=(y1+y2)/2で計算されます。

中点

次に、中点の座標がmx=(x1+x2)/2my=(y1+y2)/2になる理由を説明します。

2つの座標(x1,y1)と(x2,y2)のxとyの差を求めるとそれぞれ(x2-x1)、(y2-y1)となります。この値を半分にしてx1とy1に足した値が中点の座標(mx,my)です(下図)。これを式で表すとmx=x1+(x2-x1)/2、my=y1+(y2-y1)/2となります。

さらに、これらの式を簡単にするとmx=x1+(x2-x1)/2はmx=(x1+x2)/2、my=y1+(y2-y1)/2はmx=(y1+y2)/2になります。

中点

ここで、中点座標を計算するJavaソースコードを紹介します。このサンプルソースでは、2つの座標を固定値として記述しているので、コマンドパラメータで渡すことはできません。

中点座標を計算するメソッドは、x座標を計算するメソッドとy座標を計算するメソッドの2つを作成しました。引数と計算式は同じで2つの値を足して2で割っているだけです。

MidPoint1.java ← クリックしてダウンロードページに移動
001:    public class MidPoint1 {
002:    	// 中点座標 mxを計算するメソッド
003:    	public static double midpoint_x( double x1, double x2 )
004:    	{
005:    		return ( x1 + x2 ) / 2.0;
006:    	}
007:    
008:    	// 中点座標 myを計算するメソッド
009:    	public static double midpoint_y( double y1, double y2 )
010:    	{
011:    		return ( y1 + y2 ) / 2.0;
012:    	}
013:    	
014:    
015:    	public static void main( String[] args ) {
016:    		double x1, y1;	// 1つ目の座標
017:    		double x2, y2;	// 2つ目の座標
018:    		double mx, my;	// 中点の座標
019:    
020:    		// 1つ目の座標
021:    		x1 = 52.0;
022:    		y1 = 30.4;
023:    
024:    		// 2つ目の座標
025:    		x2 = 143.0;
026:    		y2 = 12.3;
027:    
028:    		// 中点の座標計算
029:    		mx = midpoint_x( x1, x2 );
030:    		my = midpoint_y( y1, y2 );
031:    
032:    		// 結果表示
033:    		System.out.println( "中点の座標は(" + mx + "," + my + ")です" );
034:    	}
035:    }

MidPoint1を実行

C:\talavax\javasample>java MidPoint1

実行結果

中点の座標は(97.5,21.35)です

2つの座標(52.0,30.4)、(143.0,12.3)の中点座標が(97.5,21.35)として表示されます。2つの座標の値をいろいろと変えて試してみてください。

次のJavaソースコードは、MidPoint2.java中点座標を計算するメソッドを変更して、x座標とy座標を戻すようにしたものです。Javaのメソッドはreturn文で値を1つだけしか返せませんが、配列を使えば複数の値を戻すことができます。以下の例では、double型配列の1番目にx座標、2番目にy座標を格納しています。

MidPoint2.java ← クリックしてダウンロードページに移動
001:    public class MidPoint2 {
002:    	// 中点座標 mx,myを計算するメソッド
003:    	public static void midpoint( double[] m, double x1, double y1,
004:    								 double x2, double y2 )
005:    	{
006:    		m[ 0 ] = ( x1 + x2 ) / 2.0;
007:    		m[ 1 ] = ( y1 + y2 ) / 2.0;
008:    	}
009:    	
010:    
011:    	public static void main( String[] args ) {
012:    		double x1, y1;	// 1つ目の座標
013:    		double x2, y2;	// 2つ目の座標
014:    		double[] m;	// 中点の座標
015:    
016:    		// 1つ目の座標
017:    		x1 = 52.0;
018:    		y1 = 30.4;
019:    
020:    		// 2つ目の座標
021:    		x2 = 143.0;
022:    		y2 = 12.3;
023:    
024:    		// 中点の座標計算
025:    		m = new double[ 2 ];
026:    		midpoint( m, x1, y1, x2, y2 );
027:    
028:    		// 結果表示
029:    		System.out.println( "中点の座標は(" + m[ 0 ] + ","
030:    								 + m[ 1 ] + ")です" );
031:    	}
032:    }

MidPoint2を実行

C:\talavax\javasample>java MidPoint2

実行結果

中点の座標は(97.5,21.35)です

MidPoint1.javaと同じ結果が得られました。このことから配列の値がメソッドで変更されていることがわかります。

■関連コンテンツ

計算結果の表示 四則演算(足し算/引き算/掛け算/割り算)について
配列 同じ型の変数をまとめた配列について解説

■新着情報

2019.09.13 長さの単位変換 1マイル、1フィートは何m?
2019.09.06 クイックソート 高速に配列に並び替える方法
2019.09.05 中央値(メディアン) 配列に格納されている値の中央値を求める
2019.09.05 最頻値 配列から出現回数が最も多い値の取得
2019.09.03 配列値の反転 配列の反転処理
2019.08.05 トランプの操作 トランプを操作するクラス

■広告

法人向けのETC専用カード

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

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

Topへ