Нужна функция, которая переводит скорость вращения - PullRequest
1 голос
/ 27 июля 2011

У меня есть летающий объект, и я хочу указать ему направление, в котором он движется. То, что я имею, является текущей скоростью x и y объекта и способностью поворачивать изображение. Так что мне нужна функция, которая принимает скорость x и y и дает мне градусы, на которые мне нужно вращаться. Это функция, которую я имею до сих пор:

private float getRotation(float x, float y)
{
    if (x == 0 && y > 0)
        return 90;
    else if (x == 0 && y < 0)
        return 270;
    else if (x > 0 && y == 0)
        return 0;
    else if (x < 0 && y == 0)
        return 180;
    else if (x == 0 && y == 0)
        return 0;
    else
        return ????;
}

То, что у меня есть, пока правильно, за исключением случаев, когда ???? - самая важная часть. Кто-нибудь знает, как заставить это работать?

Это может быть больше математической проблемой, но это связано с программированием, поэтому, если это не на том форуме, я прошу прощения.

Ответы [ 2 ]

4 голосов
/ 27 июля 2011
1 голос
/ 27 июля 2011

Мне пришлось сделать что-то похожее для игры, которую я написал, в итоге я использовал полярные координаты .. вот результат:

if (velocity.x > 0 && velocity.y >= 0)
    angle =  atan(velocity.y/velocity.x);
else if (velocity.x > 0 && velocity.y < 0)
    angle = atan(velocity.y/velocity.x) - 2.0f*PI;
else if (velocity.x < 0)
    angle = atan(velocity.y/velocity.x) + PI;
else if (velocity.x == 0 && velocity.y > 0)
    angle = PI/2.0f;
else if (velocity.x == 0 && velocity.y < 0)
    angle = 3.0f*PI/2.0f;

Я был еще молод, когда писал эту часть, atan2на самом деле достаточно, но я действительно хотел повеселиться, просматривая мой старый исходный код ..

Просто замечание: не используйте равные сравнения (==) с плавающими, всегда проверяйте с порогомнапример, abs(x) < 0.01f), просто потому, что, как вы знаете, они не точны, как вы бы хотели, чтобы они были.

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