ゆるゆるプログラミング

・2点間の距離

2点間の距離(2次元)とは、2つの座標(x1,y1)と(x2,y2)を結ぶ直線の距離のことです。

下の図は、(x1,y1)と(x2,y2)を結んだ直線と、その距離lを表したものです。

2点間の距離2点間の距離

Distance.java
001:    public class Distance {
002:    	public static void main( String[] args ) {
003:    		double x1, y1;
004:    		double x2, y2;
005:    
006:    		// 1つ目の座標を代入
007:    		x1 = 60.0;
008:    		y1 = 20.0;
009:    
010:    		// 2つ目の座標を代入
011:    		x2 = 10.0;
012:    		y2 = 40.0;
013:    
014:    		// 結果を表示
015:    		System.out.println( dist( x1, y1, x2, y2 ) );
016:    	}
017:    
018:    
019:    	// (x1,y1)-(x2,y2)の直線距離を計算するメソッド
020:    	private static double dist( double x1, double y1, double x2, double y2 )
021:    	{
022:    		double l;
023:    		double dx, dy;
024:    
025:    		// x座標の差を計算してdxに代入
026:    		dx = x2 - x1;
027:    		// y座標の差を計算してdyに代入
028:    		dy = y2 - y1;
029:    
030:    		// 2点間の距離を計算してlに代入
031:    		l = Math.sqrt( dx * dx + dy * dy );
032:    
033:    		// 計算した距離を返す
034:    		return l;
035:    	}
036:    }

Distance.javaの出力結果

53.85164807134504

以下ののソースコードが、2点間の距離を計算するメソッドです。

019:    	// (x1,y1)-(x2,y2)の直線距離を計算するメソッド
020:    	private static double dist( double x1, double y1, double x2, double y2 )
021:    	{
022:    		double l;
023:    		double dx, dy;
024:    
025:    		// x座標の差を計算してdxに代入
026:    		dx = x2 - x1;
027:    		// y座標の差を計算してdyに代入
028:    		dy = y2 - y1;
029:    
030:    		// 2点間の距離を計算してlに代入
031:    		l = Math.sqrt( dx * dx + dy * dy );
032:    
033:    		// 計算した距離を返す
034:    		return l;
035:    	}

この計算には、ピタゴラスの定理を使用しています。ピタゴラスの定理は、直角三角形の3辺の長さの関係を表したもので、斜辺の長さの2乗は、他の2つの辺の長さをそれぞれ2乗して値の和(合計)と同じになるというものです。

下の図は、2つの座標間の距離を計算する方法を示した図で、l2点間の距離で、dxがX方向の差を、dyがY方向の差を表しています。これをピタゴラスの定理に当てはめると、lが斜辺、dxdyがその他の2辺です。2点の座標の位置関係によって、2つの辺の長さ(dxとdy)がマイナス(-)の値になることがありますが、これらの値は計算時に2乗するので、結果的に符号が無視され、正しい結果が得られます。

ピタゴラスの定理

実際に、ソースコードに書かれている数値で、解説していきます。

006:    		// 1つ目の座標を代入
007:    		x1 = 60.0;
008:    		y1 = 20.0;
009:    
010:    		// 2つ目の座標を代入
011:    		x2 = 10.0;
012:    		y2 = 40.0;

dxは、x2 - x1で計算しているので、dx= 10.0 - 60.0 = -50.0です。dyは、y2-y1で計算しているので、dy=40.0-20.0=20.0です。

2点間の距離lは、dxの2乗とdyの2乗を足した値の平方根なので、dxの2乗= -50.0 x -50.0 = 2500.0と、dyの2乗= 20.0 x 20.0 = 400.0を足した2500.0 + 400.0 = 2900.0平方根53.85164807134504が、2点間の距離として計算されます。

■関連コンテンツ

平方根 Math.sqrtの使い方について解説
値の2乗 値を2乗するメソッドの作り方を解説
数学関数について 数学関数について解説
マンハッタン距離 マンハッタン距離とは

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

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

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

Topへ