2020.03.23

2点間の距離計算

はじめに

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

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

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

Javaソースコード

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

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

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

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


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

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

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

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

実行結果

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

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

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

C:\talavax\javasample>javac Distance.java

実行

C:\talavax\javasample>java Distance
53.85164807134504

Javaソースコードの解説

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

019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
	// (x1,y1)-(x2,y2)の直線距離を計算するメソッド
	private static double dist( double x1, double y1, double x2, double y2 )
	{
		double l;
		double dx, dy;

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

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

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

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

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

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

006
007
008
009
010
011
012
		// 1つ目の座標を代入
		x1 = 60.0;
		y1 = 20.0;

		// 2つ目の座標を代入
		x2 = 10.0;
		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メソッドの使い方をソースコードを使って詳しく解説しています。

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

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2020.03.23

三角形って何?

2022.07.26

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

2020.03.23

指定した基準座標から、指定したマンハッタン距離にある座標に●を描画!

2023.02.15

円の直径と半径について図を使って詳しく解説しています。

2020.03.23

基準とする座標に最も近い座標を複数の座標から探す方法は?

2021.03.10

グラデーションって何?

2024.11.13

横方向に色を滑らかに変化するグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2020.03.23

画像の中心から放射状に色を滑らかに変化するグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2020.03.23

画像の4隅の色を与えてグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2015.12.02

マンハッタン距離ってどんな距離?

2020.03.23

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

2020.03.23

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

2020.03.23

円の中に含まれる格子の数と格子の外の数から円周率πを計算する方法を紹介しています。図とJavaのソースコードでくわしく説明していますので、興味のある方は記事をご覧ください。

2020.12.22

画像の幅と高さを指定して黒く塗りつぶした円を描画する方法を紹介しています。Javaのソース付きです。

2019.11.11

同じサイズの円を縦と横方向に同じ間隔で並べて出来る模様の画像を作成する方法を紹介。

2019.06.14

できるだけ隙間がなくなるように円を並べて出来る模様の画像を作成する方法を紹介。

2019.06.17

平面上の位置を表す座標系の1つである「極座標系」について詳しく解説。

2024.11.27

画像を、幾何学模様のカラフルなガラスを張って作られたような画像に変換する方法を解説しています。ソースコード付きです。

2017.03.01

テキストで塗りつぶし円を表現する方法を紹介します。興味のある方は是非ご覧ください。

2020.06.03

単位円の意味をくわしく解説しています。

2020.03.23

単位ベクトルの意味と、単位ベクトルの求め方を解説しています。

2020.03.23

広告