terrestres puntos programa para geograficos entre distancia coordenadas calcular algoritmo java math distance

java - programa - distancia entre dos puntos terrestres



Quiero calcular la distancia entre dos puntos en Java (7)

OK, así que he escrito la mayor parte de un programa que me permitirá determinar si dos círculos se superponen.

No tengo ningún problema con mi programa aparte de un problema: el programa no aceptará el código que he escrito para la distancia entre los dos puntos centrales. Puedo averiguar la lógica if / else para decirle al usuario lo que sucede dependiendo del valor de la distancia más adelante, pero quiero saber qué está mal ahora. Eclipse, el programa en el que estoy codificando, me dice que la distancia debe resolverse en una matriz, pero ya le dije que es un int.

Aquí está mi código:

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


Basado en el comentario de @trashgod, esta es la forma más sencilla de calcular> la distancia:

double distance = Math.hypot(x1-x2, y1-y2); De la documentación de Math.hypot:

Devuelve: sqrt(x²+ y²) sin desbordamiento o desbordamiento intermedio.

Mover

Debajo del comentario aprobado de Bob, dijo que no podía explicar lo que

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

hizo. Para explicar un triángulo tiene tres lados. Con dos puntos puedes encontrar la longitud de esos puntos en función de la x,y de cada uno. Xa=0, Ya=0 Si el pensamiento en coordenadas cartesianas es (0,0) y luego Xb=5, Yb=9 Nuevamente, las coordenadas cartesianas son (5,9) . Entonces, si tuvieras que graficarlas en una cuadrícula, la distancia de x a otra x suponiendo que están en el mismo eje y es +5 . y la distancia a lo largo del eje Y de uno a otro, asumiendo que están en el mismo eje x es +9 . (piense en la recta numérica) Por lo tanto, un lado de la longitud del triángulo es 5, otro lado es 9. Una hipotenusa es

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

que es la longitud del lado restante de un triángulo. Por lo tanto, es bastante similar a una fórmula de distancia estándar donde

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

porque si elimina el sqrt en el lado izquierdo de la operación y en su lugar hace distancia ^ 2, entonces todavía tiene que obtener el sqrt de la distancia. Entonces, la fórmula de la distancia es el teorema de Pitágoras, pero de una manera en que los maestros pueden llamarla algo diferente para confundir a la gente.


A diferencia maths-on-paper notación maths-on-paper , la mayoría de los lenguajes de programación (Java incluido) necesitan un signo * para realizar la multiplicación. Por lo tanto, su cálculo de distancia debe leer:

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

O alternativamente:

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


Basado en el comentario de @trashgod, esta es la forma más sencilla de calcular la distancia:

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

De la documentation de Math.hypot :

Devuelve: sqrt(x²+ y²) sin desbordamiento o desbordamiento intermedio.


Debe indicar explícitamente a Java que desea multiplicar.

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

A diferencia de las ecuaciones escritas, el compilador no sabe que esto es lo que desea hacer.


Esto puede ser ANTIGUO, pero aquí está la mejor respuesta:

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


Math.sqrt devuelve un doble, así que también tendrás que convertirlo a int.

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


También podrías usar la clase de API de Java de Point2D:

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

Ejemplo:

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