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