Math Cocos2D/数学-清洁角度转换

Math Cocos2D/数学-清洁角度转换,math,cocos2d-iphone,Math,Cocos2d Iphone,早上好 我只是想磨练我的数学能力,我有一些关于Cocos2D的问题。因为Cocos2D想要“简化”事情,所以所有精灵都有一个旋转属性,范围从0-360(359?)CW。这迫使您在处理atan之类的函数时进行一些(对我来说)令人费解的转换 所以f.ex。此方法: - (void)rotateTowardsPoint:(CGPoint)point { // vector from me to the point CGPoint v = ccpSub(self.position

早上好

我只是想磨练我的数学能力,我有一些关于Cocos2D的问题。因为Cocos2D想要“简化”事情,所以所有精灵都有一个旋转属性,范围从0-360(359?)CW。这迫使您在处理atan之类的函数时进行一些(对我来说)令人费解的转换

所以f.ex。此方法:

- (void)rotateTowardsPoint:(CGPoint)point
{    
    // vector from me to the point
    CGPoint v = ccpSub(self.position, point);

    // ccpToAngle is just a cute wrapper for atan2f
    // the macro is self explanatory and the - is to flip the direction I guess
    float angle = -CC_RADIANS_TO_DEGREES(ccpToAngle(v));

    // just to get it all in the range of 0-360
    if(angle < 0.f)
        angle += 360.0f;

    // but since '0' means east in Cocos..
    angle += 180.0f;

    // get us in the range of 0-360 again
    if(angle > 360.0f)
        angle -= 360.0f;

    self.rotation = angle;
}
-(无效)旋转方向点:(CGPoint)点
{    
//从我到点的向量
CGV点=ccpSub(自身位置,点);
//ccpToAngle只是atan2f的可爱包装
//宏是不言自明的,-是我猜的反转方向
浮动角度=-CC_弧度到_度(ccptoagle(v));
//只是为了让它都在0-360范围内
如果(角度<0.f)
角度+=360.0f;
//但是因为“0”在Cocos中的意思是东方。。
角度+=180.0f;
//让我们再回到0-360的范围
如果(角度>360.0f)
角度-=360.0f;
自转=角度;
}
按预期工作。但对我来说,这看起来有点野蛮有没有更干净的方法达到同样的效果?

// vector from me to the point
    CGPoint v = ccpSub(self.position, point);

实际上,这是从点到你们的向量

// just to get it all in the range of 0-360
你不需要那样做

这就足够了

float angle = -CC_RADIANS_TO_DEGREES(ccpToAngle(v));
self.rotation = angle + 180.0f;

对于等效转换

确实如此!只是比我的胡说八道要干净一点。“事实上,这是从点到你们的向量。”是的,想想看,它当然是。我完全知道,我只是被早上的愚蠢所震惊。谢谢你的回复!