0

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

4

1 に答える 1

1

@trumpetlicksが言ったように、そのような最も近い点を見つけることはできませんが、私はあなたが何を望んでいるかを理解していると-(void) rotateAroundPoint:(CGPoint)rotationPoint angle:(CGFloat)angle思います.

ここに画像の説明を入力

フロート半径を選択するだけです。

現在のポイントを知っていて、半径が1であるとしましょう。基本的には、0度がポイントの左にあると仮定して、前のポイントを度なしで計算できます。ポイントは200,200で、半径0度で前のポイントは自動的に199,200になります。これで基準点ができたので、スプライトを動かしたい点を計算します:

//choose a feasable radius
    float radius = 0.5;
    //position_ is your preknown position as you said
    //find a the point to roate 
    //position_.x-radius is always 0 degrees of your current point
    CGFloat x = cos(rads) * ((position_.x-radius)-position_.x) - sin(rads) * ((position_.y)-position_.y) + position_.x;
    CGFloat y = sin(rads) * ((position_.x-radius)-position_.x) + cos(rads) * ((position_.y)-position_.y) + position_.y;

    //get the new point
    CGPoint newLocation = ccp(x, y);
于 2013-02-07T17:00:45.347 に答える