适用于opencv,居于c++,二维平面,角度测量
float angle(Point pt1, Point pt0, Point pt2)//角度计算
{
double dx1 = (pt1.x - pt0.x);
double dy1 = (pt1.y - pt0.y);
double dx2 = (pt2.x - pt0.x);
double dy2 = (pt2.y - pt0.y);
double angle_line = (dx1*dx2 + dy1 * dy2) / sqrt((dx1*dx1 + dy1 * dy1)*(dx2*dx2 + dy2 * dy2) + 1e-10);
double cosM;
if (pt2.y > pt1.y)
{
cosM = 1;
}
else if (pt2.y <= pt1.y)
{
cosM = -1;
}
double a = acos(angle_line) * (cosM)*180 / 3.141592653;
Point linefirst = Point(pt1.x - pt0.x, pt1.y - pt0.y );
Point linesecond = Point(pt2.x - pt0.x, pt2.y - pt0.y );
bool isClockwise = linefirst.x * linesecond.y - linesecond.x * linefirst.y < 0;
if (isClockwise)
{
a = 360 - a;
}
return a;
}



