Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating angle between two points - java

I need to calculate the angle in degrees between two points, with a fixed point that is connected with the given two points by a line.

Here is an image that illustrates what I need:

enter image description here

Here is what I have tried so far:

public static float GetAngleOfLineBetweenTwoPoints(float x1, float x2, float y1, float y2) {
        float xDiff = x2 - x1;
        float yDiff = y2 - y1;
        return (float) (Math.atan2(yDiff, xDiff) * (180 / Math.PI));
}

It's pointless to say that it doesn't provide the correct answer.

like image 512
David Lasry Avatar asked Sep 27 '14 16:09

David Lasry


1 Answers

You can have the following method that calculates the angle in radians using the Math.atan2 method:

public static double angleBetweenTwoPointsWithFixedPoint(double point1X, double point1Y, 
        double point2X, double point2Y, 
        double fixedX, double fixedY) {

    double angle1 = Math.atan2(point1Y - fixedY, point1X - fixedX);
    double angle2 = Math.atan2(point2Y - fixedY, point2X - fixedX);

    return angle1 - angle2; 
}

And call it with three points (using Math.toDregrees to transform resulting angle from radians to degrees):

System.out.println(Math.toDegrees(
            angleBetweenTwoPointsWithFixedPoint(0, 0, // point 1's x and y
                                                1, 1, // point 2
                                                1, 0  // fixed point
                                               )));

Output: 90.0

Feel free to use Java's standard Point or Line2D classes in your solution though. This was just to demonstrate it works.

like image 54
Voicu Avatar answered Sep 18 '22 10:09

Voicu