Подтвердить что ты не робот

Я хочу рассчитать расстояние между двумя точками в Java

Итак, я написал большую часть программы, которая позволит мне определить, перекрываются ли два круга.

У меня нет никаких проблем с моей программой, за исключением одной проблемы: программа не примет код, который я написал для расстояния между двумя центральными точками. Я могу понять логику 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 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 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));

    }    
}
4b9b3361

Ответ 1

На основе комментария @trashgod это самый простой способ вычисления расстояния:

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

Из документация Math.hypot:

Возвращает: sqrt(x²+ y²) без промежуточного переполнения или переполнения.

Ответ 2

В отличие от обозначения 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));

Ответ 3

Это может быть OLD, но вот лучший ответ:

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

Ответ 4

Вам нужно явно указать Java, которую вы хотите размножить.

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

В отличие от письменных уравнений компилятор не знает, что вы хотите сделать.

Ответ 5

На основе комментария @trashgod это самый простой способ вычисления > distance:

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). Поэтому, если вы планируете строить их на сетке, расстояние от x до другого x, если они находятся на одной оси y, составляет +5. и расстояние вдоль оси Y от одного до другого, предполагая, что они находятся на одной оси x, составляет +9. (думаю, числовая линия) Таким образом, одна сторона длины треугольника равна 5, другая сторона равна 9. Гипотенуза

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

который является длиной оставшейся части треугольника. Таким образом, это то же самое, что и стандартная формула расстояния, где

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

потому что если вы покончите с sqrt на левой стороне операции и вместо этого сделаете расстояние ^ 2, вам все равно придется получить sqrt с расстояния. Таким образом, формула расстояния - это теорема Пифагора, но так, что учителя могут называть ее чем-то другим, чтобы путать людей.

Ответ 6

Math.sqrt возвращает double, поэтому вам также нужно будет отнести его к int

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

Ответ 7

Вы также можете использовать класс Java2 в Java Point2D:

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