用Java计算两点之间的距离

2025/04/19

1. 概述

在本快速教程中,我们将展示如何在Java中计算两点之间的距离。

2. 距离的数学公式

假设平面上有两点:第一点A的坐标为(x1,y1),第二点B的坐标为(x2,y2),我们想计算两点之间的距离AB。

首先,我们来画一个直角三角形,斜边为AB:

根据勾股定理,三角形两条直角边的平方和等于三角形斜边的平方:AB2 = AC2 + CB2

其次,我们来计算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包提供了现成的解决方案,但我们首先按原样实现上述公式:

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中计算两点之间距离的方法。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章