我想计算Java中两点之间的距离

时间:2013-01-21 00:42:44

标签: java math distance

好的,所以我编写了大部分程序,可以让我确定两个圆是否重叠。

除了一个问题,我的程序没有任何问题:程序不会接受我为两个中心点之间的距离编写的代码。我可以弄清楚if / else逻辑告诉用户取决于稍后的距离值会发生什么,但我想知道现在有什么问题。 Eclipse,我正在编写的程序,告诉我应该将距离解析为数组,但我已经告诉过你它是一个int。

这是我的代码:

package circles;
import java.util.Scanner;

public class MathCircles {    
    // variable for the distance between the circles' centers
    public static int distance;

    // variable for the lengths of the radii combined
    public static int radii;

    public static void main(String[] args) {
        // Get the x-value of the center of circle one
        System.out.println("What is the x-coordinate for the center of circle one?");
        Scanner keyboard = new Scanner(System.in);
        int x1 = keyboard.nextInt();

        //Get the y-value of the center of circle one
        System.out.println("What is the y-coordinate for the center of circle one?");
        Scanner keyboard1 = new Scanner(System.in);
        int y1 = keyboard1.nextInt();

        //Get the radius length of circle one.
        System.out.println("How long is circle one's radius?");
        Scanner keyboard2 = new Scanner(System.in);
        int r1 = keyboard2.nextInt();

        // Get the x-value of the center of circle two.
        System.out.println("What is the x-coordinate for the center of circle two?");
        Scanner keyboard3 = new Scanner(System.in);
        int x2 = keyboard3.nextInt();

        //Get the y-value of the center of circle two.
        System.out.println("What is the y-coordinate for the center of circle two?");
        Scanner keyboard4 = new Scanner(System.in);
        int y2 = keyboard4.nextInt();

        //Get the radius length of circle two.
        System.out.println("How long is circle two's radius?");
        Scanner keyboard5 = new Scanner(System.in);
        int r2 = keyboard5.nextInt();

        /*
         * OK, so now I have the location of the two circles' centers,
         * as well as the lengths of their radii.
         * The circles are intersecting IF THE DISTANCE BETWEEN THE TWO CENTERS
         * IS EQUAL TO OR LESS THAN THE COMBINED LENGTHS OF THE RADII.
         * Now I need to get some math done.
         */

        //calculate the combined lengths of the radii

        radii = r1 + r2;

        //calculate the distance
        distance = Math.sqrt((x1-x2)(x1-x2) + (y1-y2)(y1-y2));

    }    
}

7 个答案:

答案 0 :(得分:56)

根据@ trashgod的评论,这是计算距离的最简单方法:

double distance = Math.hypot(x1-x2, y1-y2);

来自Math.hypot的{​​{3}}:

  

返回:sqrt(x²+ y²),没有中间溢出或下溢。

答案 1 :(得分:34)

maths-on-paper表示法不同,大多数编程语言(包括Java)需要*符号才能进行乘法运算。因此,您的距离计算应为:

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

或者:

distance = Math.sqrt(Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2));

答案 2 :(得分:9)

这可能是旧的, 但这是最好的答案:

    float dist = (float) Math.sqrt(
            Math.pow(x1 - x2, 2) +
            Math.pow(y1 - y2, 2) );

答案 3 :(得分:4)

您需要明确告诉Java您希望成倍增加。

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

与书面公式不同,编译器不知道这是你想要做的。

答案 4 :(得分:4)

  

基于@ trashgod的评论,这是计算>距离的最简单方法:

     

double distance = Math.hypot(x1-x2, y1-y2);   来自Math.hypot的文档:

     

返回:sqrt(x²+ y²),没有中间溢出或下溢。

     

鲍勃

在鲍勃批准的评论之下,他说他无法解释

Math.hypot(x1-x2, y1-y2);

一样。解释一个三角形有三个方面。有两个点,您可以根据每个点的x,y找到这些点的长度。 Xa=0, Ya=0如果在笛卡尔坐标系中考虑(0,0)然后再考虑Xb=5, Yb=9,则笛卡尔坐标为(5,9)。因此,如果您要在网格上绘制那些,则假设它们位于同一y轴上,从x到另一个x的距离为+5。并且假设它们在相同的x轴上,沿着Y轴从一个到另一个的距离是+9。 (想想数字线)因此三角形长度的一边是5,另一边是9.斜边是

 (x^2) + (y^2) = Hypotenuse^2

是三角形剩余边的长度。因此与标准距离公式完全相同

 Sqrt of (x1-x2)^2 + (y1-y2)^2 = distance 

因为如果你取消操作左侧的sqrt而是使距离^ 2,那么你仍然必须从远处获得sqrt。因此,距离公式是毕达哥拉斯定理,但在某种程度上,教师可以称之为不同的东西来混淆人们。

答案 5 :(得分:3)

Math.sqrt返回一个双精度因此你必须将它强制转换为int

distance = (int)Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));

答案 6 :(得分:2)

您也可以使用Point2D Java API类:

public static double distance(double x1, double y1, double x2, double y2)

示例:

double distance = Point2D.distance(3.0, 4.0, 5.0, 6.0);
System.out.println("The distance between the points is " + distance);