Javaで2点間の距離を計算する

1概要

このクイックチュートリアルでは、Javaで2点間の距離を計算する方法を説明します。

2距離の計算式

平面上に2つの点があるとしましょう。最初の点Aは座標(x1、y1)を持ち、2番目の点Bは座標(x2、y2)を持ちます。点間の距離ABを計算したい。

まず、斜辺ABを使って直角三角形を作成しましょう。

ピタゴラスの定理によると、三角形の足の長さの二乗の合計は、三角形の斜辺の長さの二乗と同じです。 AB ^ 2 ^ = AC ^ 2 ^ CB ^ 2 ^

次に、ACとCBを計算しましょう。

明らかに:

AC = y2 - y1

同様に:

BC = x2 - x1

方程式の部分を代用しましょう。

distance **  distance = (y2 - y1) **  (y2 - y1) + (x2 - x1) **  (x2 - x1)

最後に、上記の方程式から点間の距離を計算できます。

distance = sqrt((y2 - y1) **  (y2 - y1) + (x2 - x1) **  (x2 - x1))

それでは、実装部分に移りましょう。

3 Java実装

3.1. プレーンフォーミュラを使用する

java.lang.Math __と java.awt.geom.Point2D __packageはすぐに使えるソリューションを提供しますが、最初に上記の公式をそのまま実装しましょう:

public double calculateDistanceBetweenPoints(
  double x1,
  double y1,
  double x2,
  double y2) {
    return Math.sqrt((y2 - y1) **  (y2 - y1) + (x2 - x1) **  (x2 - x1));
}

解決策をテストするために、上の図に示すように、足 3 4 を持つ三角形を見てみましょう。斜辺の値として 5 が適していることは明らかです。

3 **  3 + 4 **  4 = 5 **  5

解決策を確認しましょう。

@Test
public void givenTwoPoints__whenCalculateDistanceByFormula__thenCorrect() {
    double x1 = 3;
    double y1 = 4;
    double x2 = 7;
    double y2 = 1;

    double distance = service.calculateDistanceBetweenPoints(x1, y1, x2, y2);

    assertEquals(distance, 5, 0.001);
}

3.2. java.lang.Math パッケージを使用する

calculateDistanceBetweenPoints() メソッドの乗算結果が大きすぎると、オーバーフローが発生する可能性があります。それとは異なり、 Math.hypot() メソッドは中間のオーバーフローやアンダーフローを防止します。

public double calculateDistanceBetweenPointsWithHypot(
    double x1,
    double y1,
    double x2,
    double y2) {

    double ac = Math.abs(y2 - y1);
    double cb = Math.abs(x2 - x1);

    return Math.hypot(ac, cb);
}

以前と同じ要点を取り、距離が同じであることを確認しましょう。

@Test
public void givenTwoPoints__whenCalculateDistanceWithHypot__thenCorrect() {
    double x1 = 3;
    double y1 = 4;
    double x2 = 7;
    double y2 = 1;

    double distance = service.calculateDistanceBetweenPointsWithHypot(x1, y1, x2, y2);

    assertEquals(distance, 5, 0.001);
}

3.3. java.awt.geom.Point2D パッケージを使う

最後に、 Point2D.distance() メソッドを使用して距離を計算しましょう。

public double calculateDistanceBetweenPointsWithPoint2D(
    double x1,
    double y1,
    double x2,
    double y2) {

    return Point2D.distance(x1, y1, x2, y2);
}

それでは、同じ方法でメソッドをテストしましょう。

@Test
public void givenTwoPoints__whenCalculateDistanceWithPoint2D__thenCorrect() {

    double x1 = 3;
    double y1 = 4;
    double x2 = 7;
    double y2 = 1;

    double distance = service.calculateDistanceBetweenPointsWithPoint2D(x1, y1, x2, y2);

    assertEquals(distance, 5, 0.001);
}

4結論

このチュートリアルでは、Javaで2点間の距離を計算する方法をいくつか示しました。

いつものように、例で使用されているコードはhttps://github.com/eugenp/tutorials/tree/master/algorithms-miscellaneous-2[over on GitHub]から入手できます。