Подтвердить что ты не робот

XNA 2D векторные углы - какой правильный способ расчета?

что в XNA в 2D работает стандартный векторный угол?

0 градусов вправо, 90 точек вверх, 180 слева, 270 вниз?

Каковы "стандартные" реализации

float VectortoAngle(Vector2 vec)

и

Vector2 AngleToVector(float angle)

так что VectortoAngle (AngleToVector (PI)) == PI?

4b9b3361

Ответ 1

Чтобы ответить на ваш первый вопрос, на 0 градусов вверх, на 90 градусов вправо, на 180 градусов вниз и на 270 градусов. Здесь - это простой учебник по вращению 2D XNA, чтобы дать вам больше информации.

Что касается преобразования векторов в углы и назад, я нашел пару хороших реализаций здесь:

Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}

float VectorToAngle(Vector2 vector)
{
    return (float)Math.Atan2(vector.Y, vector.X);
}

Кроме того, если вы новичок в 2D-программировании, вы можете захотеть заглянуть в Torque X 2D, что дает много этого для вы. Если вы заплатили за разработку для XNA, вы бесплатно получаете двоичные файлы для двигателей, и есть класс полезности, который преобразуется из углов в векторы и обратно, а также другие полезные функции, подобные этому.

Изменить: Как отметил Раньери в комментариях, эта функция не имеет смысла, когда до 0 градусов. Здесь тот, который делает (вверху (0, -1), справа - (1, 0), down - (0, 1), left is (-1, 0):

Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle));
}

float VectorToAngle(Vector2 vector)
{
    return (float)Math.Atan2(vector.X, -vector.Y);
}

Я также хотел бы отметить, что я использовал Torque некоторое время, и он использует 0 градусов для увеличения, так что, когда я получил эту часть. Значение Up в этом случае рисует текстуру на экране так же, как и в файле. Таким образом, вниз будет рисовать текстуру вверх дном.

Ответ 2

Нет никакого соглашения, для какого направления в XNA есть определенный угол, поэтому вы можете просто определить его, как вам нравится.

Я не уверен, когда в последний раз я использовал углы в игре. Практически в каждом случае легче работать непосредственно с векторами, если начать немного менее интуитивно.