方法一:
// ptSrc: 圆上某点(初始点);
// ptRotationCenter: 圆心点;
// angle: 旋转角度° -- [angle * M_PI / 180]:将角度换算为弧度
// 【注意】angle 逆时针为正,顺时针为负
QPointF MathWidget::RotatePoint(const QPointF &ptSrc, const QPointF &ptRotationCenter, const qreal &angle)
{
//其中圆心(a,b), 圆上一点坐标(x0,y0), 旋转角度α ,
//那么旋转后的坐标 x=a+(x0-a)cosα-(y0-b)sinα , y=b+(x0-a)sinα+(y0-b)cosα
QPointF ptDst;
qreal a = ptRotationCenter.x();
qreal b = ptRotationCenter.y();
qreal x0 = ptSrc.x();
qreal y0 = ptSrc.y();
ptDst.rx() = a + (x0-a) * cos(angle * M_PI / 180) - (y0-b) * sin(angle * M_PI / 180);
ptDst.ry() = b + (x0-a) * sin(angle * M_PI / 180) + (y0-b) * cos(angle * M_PI / 180);
return ptDst;
}
一、推导过程:
1. 首先,极坐标系下,一个点绕原点( 0, 0)旋转一个角度后的坐标点
A (x1 ,y1)以原点为圆心旋转 n 度,求旋转后 A&