Math 从atan2获取角度

Math 从atan2获取角度,math,vector,cocos2d-iphone,angle,Math,Vector,Cocos2d Iphone,Angle,我有一个关于atan2()的简单问题,那就是如何获得炮塔的角度,使它跟随飞船的方向 我有一个从炮塔到宇宙飞船的向量,但据我所知,atan2f给出了斜边到0度线的角度 如果我错了,请纠正我 我希望这个角度高亮显示为(蓝色),这样它就可以跟随宇宙飞船的方向 这是我的密码: -(void) upDateTurret:(CCTime)delta{ CGPoint playerToCannonVector = ccpSub(_playerSprite.position, _turretSprite.p

我有一个关于atan2()的简单问题,那就是如何获得炮塔的角度,使它跟随飞船的方向

我有一个从炮塔到宇宙飞船的向量,但据我所知,atan2f给出了斜边到0度线的角度

如果我错了,请纠正我

我希望这个角度高亮显示为(蓝色),这样它就可以跟随宇宙飞船的方向

这是我的密码:

-(void) upDateTurret:(CCTime)delta{

CGPoint playerToCannonVector = ccpSub(_playerSprite.position, _turretSprite.position);

float angle = atan2f(playerToCannonVector.y, playerToCannonVector.x);

_turretSprite.rotation = 90.0f - CC_RADIANS_TO_DEGREES(angle);
}
这给了我正确的结果,但如何?因为atan2f给出了斜边到0度线的角度(红色角度)。

这就是我使用的:

// Calculates the angle from one point to another, in radians.
//
+ (float) angleFromPoint:(CGPoint)from toPoint:(CGPoint)to {
    CGPoint pnormal = ccpSub(to, from);
    float radians = atan2f(pnormal.x, pnormal.y);

    return radians;
}
它基本上与您自己的代码相匹配;唯一真正的区别是你从90.0度减去结果,这是我认为你缺少的。请记住,0度的旋转通常会指向屏幕顶部的“北”(至少对我来说是这样)

要将角度从北=0转换为东=0,我使用:

// Converts an angle in the world where 0 is north in a clockwise direction to a world
// where 0 is east in an anticlockwise direction.
//
+ (float) angleFromDegrees:(float)deg {
    return fmodf((450.0f - deg), 360.0);
}

我从结果中减去90度,因为在cocos2d中,旋转从北开始,在数学中,旋转从东开始。我添加了另一种方法来处理cocos2d和“数学”之间的差异。再说一次,我不记得需要做那个翻译。