неправильные значения arcsin? - PullRequest
1 голос
/ 27 августа 2011

Я пытаюсь вычислить угол тела в моей игре.

У меня есть это:

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 Ответ

4 голосов
/ 27 августа 2011
angle=( asin( (Ys-y ) / power )  )-90;

Это выглядит очень подозрительно.Функция asin возвращает угол в радианах - вычитание 90 из этого гарантированно не будет иметь никакого смысла.

Кстати, atan2() проще и намного стабильнее для определения направления2D вектора.Использование арксинуса может привести к большим ошибкам округления, когда угол близок к правому.(Большинство математических библиотек фактически вычисляют арксинусы, выполняя обратное вашего вычисления и применяя аппаратные инструкции atan2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...