jmasterx
jmasterx

Reputation: 54113

Calculate Angle of 2 points

Given P1 and P2, how can I get the angle from P1 to P2? Thanks

Upvotes: 26

Views: 46737

Answers (3)

user11910606
user11910606

Reputation: 51

//This working code is for windows hdc mouse coords gives the angle back that is used in windows. It assumes point 1 will be your origin point
// Tested and working on VS 2017 using 2 mouse coordinates in hdc.
//
//code to call our function.
float angler = get_angle_2points(Point1X, Point1Y, Point2X, Point2Y);


// Takes 2 Window coords(points), turns them into vectors using the origin and calculates the angle around the xaxis between them.
// This function can be used for any hdc window. Ie 2 mouse points.
float get_angle_2points(int p1x, int p1y, int p2x,int p2y)
{
    //Make point1 the origin, make point2 relative to the origin so we do point1 - point1, and point2-point1,
    //since we dont need point1 for the equation to work, the equation works correctly with the origin 0,0.
    int deltaY = p2y - p1y;
    int deltaX = p2x - p1x; //Vector 2 is now relative to origin, the angle is the same, we have just transformed it to use the origin.

    float angleInDegrees = atan2(deltaY, deltaX) * 180 / 3.141;

    angleInDegrees *= -1; // Y axis is inverted in computer windows, Y goes down, so invert the angle.

    //Angle returned as:
    //                      90
    //            135                45
    //
    //       180          Origin           0
    //
    //           -135                -45
    //
    //                     -90


    // returned angle can now be used in the c++ window function used in text angle alignment. ie plf->lfEscapement = angle*10;
    return angleInDegrees;
}

Upvotes: 4

Ankur
Ankur

Reputation: 51100

Ok remembering high school trig. this is what I get.

Two points are A(x1,y1) and B(x2,y2)

I assume you want the angle between the two points and the origin O(0,0).

Well each point makes a triangle bounded by its height, its base and its hypotenuse, so you get two angles alpha1 and alpha2. The idea is to find each of these and compute your required angle beta, by doing beta = alpha1 - alpha2 where alpha1 is such that alpha1 > alpha2.

Compute alpha1 = inv_tan(y1/x1) and alpha2 = inv_tan(y2/x2)

then do beta = alpha1 - alpha2

Upvotes: 6

Jack
Jack

Reputation: 133577

It's just float angle = atan2(p1.y - p2.y, p1.x - p2.x).

Of course the return type is in radians, if you need it in degrees just do angle * 180 / PI

Upvotes: 58

Related Questions