最近看到一个有意思的,学习总结如下
C++坐标旋转
相对于坐标原点
void vRotationTransform(double dX, double dY, double dAngle, double &dbNewX, double &dbNewY)
{
//此旋转是相对于坐标原点
dbNewX = dX * cos(dAngle * PI / 180) - dY * sin(dAngle * PI / 180);
dbNewY = dX * sin(dAngle * PI / 180) + dY * cos(dAngle * PI / 180);
}
相对于坐标系上任一点
void vRotationTransform(double dX, double dY, double dAngle, double &dbNewX, double &dbNewY)
{
//此旋转是相对于任意点(centre_x, centre_y)
dbNewX = (dX - centre_x) * cos(dAngle * PI / 180) - (dY - centre_y) * sin(dAngle * PI / 180) + centre_x;
dbNewY = (dX - centre_x) * sin(dAngle * PI / 180) + (dY - centre_y) * cos(dAngle * PI / 180) + centre_y;
}
参考
链接1: https://sunriver2000.blog.youkuaiyun.com/article/details/104619972
链接2: https://blog.youkuaiyun.com/maitianpt/article/details/84983599