2012-05-18 44 views
3

我要旋转CGPoint(红色矩形)周围其他CGPoint(蓝色矩形),但它从原点(蓝色矩形)的距离改变的距离......当我在角度给予270它创建点正好在原点之上,但是当我给出角度值90时,它会降低原点,但更改距离几乎等于三倍......我想保持距离相同并且想要围绕另一个角度旋转CGPoint。请指导任何方法对cgpoints的旋转...CGPoint旋转改变从原点

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]]; 

感谢

回答

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

请让如果这不能解决您的问题,我知道您是否需要其他任何东西!