I want to calculate the distance between two points in Java

132,951

Solution 1

Based on the @trashgod's comment, this is the simpliest way to calculate distance:

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

From documentation of Math.hypot:

Returns: sqrt(x²+ y²) without intermediate overflow or underflow.

Solution 2

Unlike maths-on-paper notation, most programming languages (Java included) need a * sign to do multiplication. Your distance calculation should therefore read:

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

Or alternatively:

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

Solution 3

This may be OLD, but here is the best answer:

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

Solution 4

Based on the @trashgod's comment, this is the simpliest way to calculate >distance:

double distance = Math.hypot(x1-x2, y1-y2); From documentation of Math.hypot:

Returns: sqrt(x²+ y²) without intermediate overflow or underflow.

Bob

Below Bob's approved comment he said he couldn't explain what the

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

did. To explain a triangle has three sides. With two points you can find the length of those points based on the x,y of each. Xa=0, Ya=0 If thinking in Cartesian coordinates that is (0,0) and then Xb=5, Yb=9 Again, cartesian coordinates is (5,9). So if you were to plot those on a grid, the distance from from x to another x assuming they are on the same y axis is +5. and the distance along the Y axis from one to another assuming they are on the same x-axis is +9. (think number line) Thus one side of the triangle's length is 5, another side is 9. A hypotenuse is

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

which is the length of the remaining side of a triangle. Thus being quite the same as a standard distance formula where

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

because if you do away with the sqrt on the lefthand side of the operation and instead make distance^2 then you still have to get the sqrt from the distance. So the distance formula is the Pythagorean theorem but in a way that teachers can call it something different to confuse people.

Solution 5

You need to explicitly tell Java that you wish to multiply.

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

Unlike written equations the compiler does not know this is what you wish to do.

Share:
132,951
Marwa Roshan
Author by

Marwa Roshan

Updated on April 10, 2020

Comments

  • Marwa Roshan
    Marwa Roshan about 4 years

    OK, so I've written most of a program that will allow me to determine if two circles overlap.

    I have no problems whatsoever with my program aside from one issue: the program won't accept the code I've written for the distance between the two center points. I can figure out the if/else logic to tell the user what happens depending on the value of distance later, but I want to know what's wrong now. Eclipse, the program I'm coding on, is telling me that distance should be resolved to an array, but I've already told you that it's an int.

    Here is my 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));
    
        }    
    }