32

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

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

这是我的代码:

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));

    }    
}
4

7 回答 7

74

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

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

文档Math.hypot:_

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

于 2015-08-17T09:55:16.357 回答
36

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));
于 2013-01-21T00:45:12.323 回答
9

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

    float dist = (float) Math.sqrt(
            Math.pow(x1 - x2, 2) +
            Math.pow(y1 - y2, 2) );
于 2014-01-15T03:44:28.913 回答
5

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

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

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

鲍勃

在 Bob 批准的评论下方,他说他无法解释

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

做过。解释一个三角形有三个边。使用两个点,您可以根据每个点找到这些点的长度x,yXa=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 并改为使用 distance^2 ,那么您仍然必须从远处获取 sqrt。所以距离公式是勾股定理,但在某种程度上教师可以称之为不同的东西来混淆人们。

于 2017-07-27T23:12:14.300 回答
4

您需要明确告诉 Java 您希望进行乘法运算。

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

与书面方程式不同,编译器不知道这是您想要做的。

于 2013-01-21T00:45:13.627 回答
4

您也可以使用 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);
于 2015-09-08T19:48:46.240 回答
3

Math.sqrt 返回一个 double 所以你也必须将它转换为 int

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

于 2013-01-21T00:48:39.577 回答