arcsin错误的值?

时间:2011-08-27 14:34:19

标签: objective-c cocos2d-iphone

我正在尝试计算游戏中身体的角度。

我有这个:

power= sqrt (   pow( ( Xs-x),2)+pow((Ys-y),2)  );
    angle=( asin( (Ys-y ) / power )  )-90;
    cannonBody->SetTransform(cannonBody->GetPosition(), (-angle ) );
    NSLog(@"%f",(  x));
    NSLog(@"%f",( y));
    NSLog(@"%f",( Xs-x));   
    NSLog(@"%f",(Ys-y));    
    NSLog(@"%f",power);
    NSLog(@"%f", CC_RADIANS_TO_DEGREES( -angle));

不知怎的,我得到POWER(Ys-y)个好的值(68/82,即0.82 = 56度)         并且日志总是显示-5100的角度值,即使我从弧度转换.. 什么错了?

感谢。

1 个答案:

答案 0 :(得分:4)

angle=( asin( (Ys-y ) / power )  )-90;

这看起来很可疑。 asin函数以弧度为单位返回一个角度 - 从中​​减去90是保证没有任何意义。

顺便说一下,atan2()对于找到2D矢量的方向更容易且更稳定。当角度接近正确时,使用反正弦可能会产生大的舍入误差。 (大多数数学库实际上通过执行计算的并应用硬件atan2指令来计算反正弦。)