计算旋转中心,可以使用已知圆上三点的坐标求圆心的方式:
寻找一特征点获取坐标,旋转后继续获取当前特征点的坐标,得到三个点坐标p1(x1,y1),p2(x2,y2),p3(x3,y3),最后计算旋转中心:
struct POINT
{
double x;
double y;
}Point;
Point RotateCenterCal(Point p1,Point p2,Point p3, Point ptCenter)
{
//将三点代入圆的方程
double a = 2 * (p2.x - p1.x);
double b = 2 * (p2.y - p1.y);
double c = p2.x * p2.x + p2.y * p2.y - p1.x * p1.x - p1.y * p1.y;
double d = 2 * (p3.x - p2.x);
double e = 2 * (p3.y - p2.y);
double f = p3.x * p3.x + p3.y * p3.y - p2.x * p2.x - p2.y * p2.y;
ptCenter.x = (b * f - e * c) / (b * d - e * a);
ptCenter.y = (d * c - a * f) / (b * d - e * a);
return ptCenter;
}