3

CGPoint(赤い長方形)を別のCGPoint(青い長方形)の周りで回転させたいのですが、原点(青い長方形)からの距離が変わります...角度を270にすると、原点の真上にポイントが作成されますが、90を与えると角度の値として、それは原点を下って行きますが、距離もほぼ3倍変化します....距離を同じに保ち、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 に答える