CGPoint旋转会改变到原点的距离

3

我想围绕另一个CGPoint(蓝色矩形)旋转一个CGPoint(红色矩形),但它会改变到原点的距离(蓝色矩形)...当我将角度设置为270时,它会创建位于原点正上方的点,但当我将角度值设置为90时,它会下降到原点但同时距离也几乎增加了三倍...我想保持距离不变,并围绕另一个CGPoint旋转。请指导任何旋转cgpoints的方法...

distance = 100;
angle = 270*M_PI/180;    
rotatedPoint.x = initialPoint.x+distance*cos(angle);
rotatedPoint.y = initialPoint.y+distance*sin(angle);
    //rotatedPoint.x = initialPoint.x+tan(angle);

[test setCenter:rotatedPoint];   
[test setBackgroundColor:[UIColor redColor]];

谢谢

1个回答

2

CGAffineTransform是一个方便的工具,用于旋转、平移和缩放。为了确保点正确旋转,必须将其平移到原点,旋转它,然后再平移到原来的位置。

要完成变换,可以使用类似以下代码:

CGPoint pointToRotate = CGPointMake(30, 30);
float angleInRadians = DEGREES_TO_RADIANS(90);
CGPoint distanceFromOrigin = CGPointMake(0 - pointToRotate.x, 0 - pointToRotate.y);

CGAffineTransform translateToOrigin = CGAffineTransformMakeTranslation(distanceFromOrigin.x, distanceFromOrigin.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angleInRadians);
CGAffineTransform translateBackFromOrigin = CGAffineTransformInvert(translateToOrigin);

CGAffineTransform totalTransform = CGAffineTransformConcat(translateToOrigin, rotationTransform);
totalTransform = CGAffineTransformConcat(totalTransform, translateBackFromOrigin);

pointToRotate = CGPointApplyAffineTransform(pointToRotate, totalTransform);

如果您需要进一步了解CGAffineTransform的文档,请参考以下链接:http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

如果这不能解决您的问题,请告诉我您还需要什么帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接