已知点P1和P2,如何获取从点P1到点P2的角度?谢谢。
已知点P1和P2,如何获取从点P1到点P2的角度?谢谢。
这只是一个简单的 float angle = atan2(p1.y - p2.y, p1.x - p2.x)
。
当然,返回类型为弧度制,如果你需要角度值,只需执行 angle * 180 / PI
。
好的,记得高中三角学。这是我得到的结果。
两个点是A(x1,y1)和B(x2,y2)
我假设你想要求出这两个点与原点O(0,0)之间的夹角。
每个点都形成一个三角形,由其高度、底边和斜边组成,因此你会得到两个角alpha1和alpha2。找到它们并计算所需的角度beta,方法是进行beta = alpha1 - alpha2,其中alpha1满足alpha1>alpha2。
计算alpha1 = inv_tan(y1/x1)和 alpha2 = inv_tan(y2/x2)
然后做beta = alpha1 - alpha2
//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;
}