在网格上旋转CGPoint的最佳方法是什么?

Fra*_*ank 10 iphone math rotation

我想根据角度在屏幕上旋转CGPoint,旋转锚定在另一个点上.想知道最有效的方法是什么?

Vla*_*mir 24

你也可以使用它:

rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
Run Code Online (Sandbox Code Playgroud)

编辑:要围绕自定义点进行旋转,你必须像他在答案中描述的那样做.使用CGAffineTransform它必须看起来像:

CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(customCenter.x, customCenter.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angle);

CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat( CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);

rotatedPoint = CGPointApplyAffineTransform(initialPoint, customRotation);
Run Code Online (Sandbox Code Playgroud)


Ada*_*eld 10

使用2D旋转矩阵.如果你想围绕原点逆时针旋转一个点angle,那么你会这样做:

CGPoint RotatePointAboutOrigin(CGPoint point, float angle)
{
    float s = sinf(angle);
    float c = cosf(angle);
    return CGPointMake(c * point.x - s * point.y, s * point.x + c * point.y);
}
Run Code Online (Sandbox Code Playgroud)

如果要围绕原点以外的点旋转,则必须首先从点中减去旋转中心,使用上面的旋转,然后在旋转中心加回(这称为矩阵中的共轭)理论).