Javaプログラミング学習サイト ゆるゆるプログラミング

2020/03/23 公開

・2点間の距離(3次元)

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

下の図は、(0,0,0)と(dx,dy,dz)を結んだ直線と、その距離lを計算式で表したものです。

3次元空間での2点間の距離

距離lは、xz平面上の距離lxzを底辺とし、y座標をそのまま距離としたlyを高さとした直角三角形の斜辺として計算できます。

距離lxzは、dxとdzで作られるxz平面上の直角三角形の斜辺をピタゴラスの定理で計算します。距離lyは、dyの値です。

これらの計算式をまとめると距離lは、(dx,dy,dz)をそれぞれ2乗した値の合計平方根をとった値になります。

2つの座標(x1,y1,z1)と(x2,y2,z2)の距離lは、以下のように各座標の差を求めて、上記の計算式に当てはめることで計算することができます。

 dx = x2 - x1

 dy = y2 - y1

 dz = z2 - z1

ここから、2つの3次元座標の距離を計算するJavaのソースコードを紹介します。

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

Distance3D.javaの出力結果

55.90169943749474

以下の部分が、2つの3次元座標の距離を計算するメソッドです。

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

与えられた2つの3次元座標(x1,y1,z1)と(x2,y2,z2)の各座標の差(dx,dy,dz)を計算し、dx2+dy2+dz2平方根を計算して変数lに代入しています。そして、その値をreturn文で戻しています。

■関連コンテンツ

2点間の距離 2点間の距離計算
平方根 Math.sqrtの使い方について解説
値の2乗 値を2乗するメソッドの作り方を解説
数学関数について 数学関数について解説
マンハッタン距離 マンハッタン距離とは
最も近い座標を探す 1番近い座標は?
四則演算(足し算/引き算/掛け算/割り算)について-画像

計算結果の表示

足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明

単位ベクトルとは-画像

単位ベクトル

単位ベクトルは長さが1のベクトルのことです。任意の長さのベクトルを単位ベクトルに変換する方法も解説しています。

■新着情報

2021.06.18 変数の初期値 変数に値を代入しないで計算
2021.05.28 短針と長針の角度 短針と長針の角度は?
2021.05.19 各位(くらい)を求める 1の位の値は?10の位は?

■広告

Topへ