0

我计算两个 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 回答