2 つの CGPoints 間の角度を計算します。
//calculate radian and degree
CGPoint diff = ccpSub(center, location);//return ccp(v1.x - v2.x, v1.y - v2.y);
float rads = atan2f( diff.y, diff.x);
float degs = -CC_RADIANS_TO_DEGREES(rads);
NSLog(@"Rad %.2f Degs %.2f",rads,degs);
ここで、既知のCGPointと上記の関数の次数を持つ別の関数で、次数を満たす最も近い点を計算したいと思います。
以下のコードが役立つかもしれないと考えていましたが、以下のコードでは開始点と回転点がわかっていますが、私の状況では開始点しかわかりません。
-(void) rotateAroundPoint:(CGPoint)rotationPoint angle:(CGFloat)angle {
CGFloat x = cos(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.x-rotationPoint.x) - sin(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.y-rotationPoint.y) + rotationPoint.x;
CGFloat y = sin(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.x-rotationPoint.x) + cos(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.y-rotationPoint.y) + rotationPoint.y;
ポイントが 800,600 で次数が 70 だとすると、そのポイントとその次数で最も近いポイントを計算するにはどうすればよいでしょうか?
編集:::
通常、私のゲームではスプライトはボタンで移動されるため、ボタンが押されたときにすべての回転、移動、速度などが処理されます[sprite moveToPreGivenPostion:CGPoint]
しかし、コンパスが追加され、ユーザーがコンパスで角度を選択すると、コンパスの度の方向にスプライトを移動する必要があります。[sprite moveToPreGivenPostion:CGPoint]
既に回転やその他のものを処理しているため、関数に送信する CGPoint を決定したいだけですmoveToPreGivenPostion
。