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

・Javaソースダウンロード(ClosestCoordinates1.java)

複数の2次元座標のうち、基準の2次元座標(ox,oy)から一番近い座標を見つけるJavaソースコード例です。近さの判定には直線距離の2乗を使っています。

このソースについての記事はこちら「最も近い座標を探す」です。

ClosestCoordinates1.javaをダウンロード

ダウンロードしたファイルはzip形式です。解凍して使ってください。Windowsの場合、ダウンロードしたzipファイルをマウスの右ボタンでクリックして表示されるポップアップメニューから「すべて展開(T)」で解凍できます。

public class ClosestCoordinates1 {
	// 最も近い座標の配列の添え字を戻すメソッド
	// (ox,oy)が基準座標
	// (x[],y[])が探索座標
	static int closest_coordinates( double ox, double oy, double[] x, double[] y )
	{
		// 引数に不備がある場合、-1を戻す
		if ( null == x ) return -1;
		if ( null == y ) return -1;
		if ( 1 > x.length ) return -1;
		if ( 1 > y.length ) return -1;
		if ( x.length != y.length ) return -1;

		// 調べる座標数
		int crdnum = x.length;

		// 調べる座標が1つの場合、0を戻す。
		if ( 1 == crdnum ) return 0;

		// 距離の最小値を格納する変数
		// 初期値 : doubleの最大
		double dist2_min = Double.MAX_VALUE;

		// 距離の最小値が格納される配列の添え字を格納する変数
		// 初期値 : -1
		int crd_min = -1;

		// 最も近い座標を求める
		for ( int i = 0; i < crdnum; i++ ) {
			// 距離の2乗を計算
			double dx = x[ i ] - ox;
			double dy = y[ i ] - oy;
			double dist2 = dx * dx + dy * dy;

			// 距離の最小値の比較
			if ( dist2 < dist2_min ) {
				// 距離の最小値を配列の添え字の更新
				dist2_min = dist2;
				crd_min = i;
			}
		}

		// 距離の最小値が格納される配列の添え字を戻す
		return crd_min;
	}


	// メイン
	public static void main(String[] args) {
		// 調べる座標を配列に格納
		// x,yは0.0以上~1000.0の乱数で作成
		double[] x = new double[ 10 ];
		double[] y = new double[ 10 ];

		for ( int i = 0; i < x.length; i++ ) {
			x[ i ] = Math.random() * 1000.0;
			y[ i ] = Math.random() * 1000.0;
		}

		// 基準の座標を設定
		double ox = 500.0;
		double oy = 500.0;
		int ans = closest_coordinates( ox, oy, x, y );
		if ( 0 > ans ) {
			System.out.println( "配列番号の取得に失敗しました!" );
		}

		// 結果を出力
		System.out.println( "最も近い座標の配列番号 : " + ans );
		System.out.println( "最も近い座標 : " + x[ ans ] + " " + y[ ans ] );
		System.out.println();

		// 調べた座標を出力
		for ( int i = 0; i < x.length; i++ ) {
			System.out.println( i + " " + x[ i ] + " " + y[ i ] );
		}
	}
}

このソースについての記事はこちら「最も近い座標を探す」です。

 

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

 

 

 

 

Topへ