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

谢谢

4

1 回答 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

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

于 2012-05-19T00:46:06.103 回答