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

Javaソースコード

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

Distance3D.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
public class Distance3D {
	public static void main( String[] args ) {
		double x1, y1, z1;
		double x2, y2, z2;

		// 1つ目の座標を代入
		x1 = 60.0;
		y1 = 20.0;
		z1 =  5.0;

		// 2つ目の座標を代入
		x2 = 10.0;
		y2 = 40.0;
		z2 = 20.0;

		// 結果を表示
		System.out.println( dist3d( x1, y1, z1, x2, y2, z2 ) );
	}


	// (x1,y1,z1)-(x2,y2,z2)の直線距離を計算するメソッド
	private static double dist3d( double x1, double y1, double z1,
						double x2, double y2, double z2 )
	{
		double l;
		double dx, dy, dz;

		// x座標の差を計算してdxに代入
		dx = x2 - x1;
		// y座標の差を計算してdyに代入
		dy = y2 - y1;
		// y座標の差を計算してdyに代入
		dz = z2 - z1;

		// 2点間の距離を計算してlに代入
		l = Math.sqrt( dx * dx + dy * dy + dz * dz );

		// 計算した距離を返す
		return l;
	}
}

実行結果

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

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

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

C:\talavax\javasample>javac Distance3D.java

実行

C:\talavax\javasample>java Distance3D
55.90169943749474

Javaソースコードの解説

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

021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
	// (x1,y1,z1)-(x2,y2,z2)の直線距離を計算するメソッド
	private static double dist3d( double x1, double y1, double z1,
						double x2, double y2, double z2 )
	{
		double l;
		double dx, dy, dz;

		// x座標の差を計算してdxに代入
		dx = x2 - x1;
		// y座標の差を計算してdyに代入
		dy = y2 - y1;
		// y座標の差を計算してdyに代入
		dz = z2 - z1;

		// 2点間の距離を計算してlに代入
		l = Math.sqrt( dx * dx + dy * dy + dz * dz );

		// 計算した距離を返す
		return l;
	}

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

以上です。

関連コンテンツ

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

2020.03.23

値の2乗を計算するメソッドの作り方を解説しています。

2020.03.23

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

2022.07.27

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

2022.10.17

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

2020.03.23

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

2020.03.20

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

2022.12.13

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2022.09.10

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

2020.03.23

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

2015.11.29

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

2020.03.23

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

2021.05.18

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

2022.10.25

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

2021.05.18

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

2016.12.16

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

2022.07.07

2つの座標(x1,y1)と(x2,y2)の直線距離を求める計算式は?

2020.03.23

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

2020.03.23

三角形って何?

2022.07.26

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

2020.03.23

ピタゴラスの定理は、直角三角形の三辺の長さの関係を表すもので、2つの座標間の距離計算などに利用できます。興味がある方は、記事をご覧ください。

2020.03.23

複数の数値の合計値と平均値を計算するプログラムをJavaのソースコードを使って解説しています。

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

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

2020.03.23

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

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

2020.03.23

広告