web-dev-qa-db-fra.com

Je veux calculer la distance entre deux points en Java

OK, j'ai donc écrit la plupart d'un programme qui me permettra de déterminer si deux cercles se chevauchent.

Je n'ai aucun problème avec mon programme à part un problème: le programme n'acceptera pas le code que j'ai écrit pour la distance entre les deux points centraux. Je peux comprendre la logique if/else pour dire à l'utilisateur ce qui se passe en fonction de la valeur de la distance plus tard, mais je veux savoir ce qui ne va pas maintenant. Eclipse, le programme sur lequel je code, me dit que la distance doit être résolue par rapport à un tableau, mais je vous ai déjà dit que c'était un int.

Voici mon code:

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

    }    
}
25
Marwa Roshan

Sur la base du commentaire de @ trashgod, c'est la façon la plus simple de calculer la distance:

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

De documentation of Math.hypot:

Renvoie: sqrt(x²+ y²) sans débordement ou sous-débordement intermédiaire.

56
Bob

Contrairement à maths-on-paper notation, la plupart des langages de programmation (Java inclus) ont besoin d'un * signe pour faire la multiplication. Votre calcul de distance doit donc se lire:

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

Ou bien:

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

Cela peut être VIEUX, mais voici la meilleure réponse:

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

Sur la base du commentaire de @ trashgod, c'est la façon la plus simple de calculer> la distance:

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

Renvoie: sqrt(x²+ y²) sans débordement ou sous-débordement intermédiaire.

Bob

Ci-dessous le commentaire approuvé de Bob, il a dit qu'il ne pouvait pas expliquer ce que le

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

fait. Pour expliquer un triangle a trois côtés. Avec deux points, vous pouvez trouver la longueur de ces points sur la base du x,y de chaque. Xa=0, Ya=0 Si vous pensez en coordonnées cartésiennes c'est (0,0) et alors Xb=5, Yb=9 Encore une fois, les coordonnées cartésiennes sont (5,9). Donc, si vous deviez tracer ceux-ci sur une grille, la distance de x à un autre x en supposant qu'ils sont sur le même axe y est +5. et la distance le long de l'axe Y de l'un à l'autre en supposant qu'ils sont sur le même axe x est +9. (pensez à la droite numérique) Ainsi, un côté de la longueur du triangle vaut 5, un autre côté est 9. Une hypoténuse est

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

qui est la longueur du côté restant d'un triangle. Donc, étant tout à fait la même chose qu'une formule de distance standard où

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

parce que si vous supprimez le sqrt sur le côté gauche de l'opération et que vous faites à la place la distance ^ 2, vous devez toujours obtenir le sqrt de la distance. La formule de la distance est donc le théorème de Pythagore, mais d'une manière que les enseignants peuvent appeler quelque chose de différent pour confondre les gens.

4
Jesse Bevil

Vous devez dire explicitement Java que vous souhaitez multiplier.

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

Contrairement aux équations écrites, le compilateur ne sait pas que c'est ce que vous souhaitez faire.

4
Jon Taylor

Math.sqrt renvoie un double, vous devrez donc également le convertir en int

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

3
Ani

Vous pourriez également vous Point2D Java classe API:

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

Exemple:

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