C ++ 3D угловая скорость

У меня небольшие проблемы с моей игрой. Я пытаюсь заставить мяч двигаться из одной точки в другую. Вот мой код:

void Create()
{
// Initialise points
StartPosition - { 20, 0, 5 };
EndPosition = { -20, 0, 5 };
}

void Calculate()
{
// Calculate difference in axis
float X = EndPosition.x - StartPosition.x;
float Z = EndPosition.z - StartPosition.z;

// Calculate y-axis rotation
float Rotation = atan2(Z, X) * (180 / M_PI);

// Calculate velocity
Velocity.x = cos( Rotation ) * 5;
Velocity.y = 0.0f;
Velocity.z = sin( Rotation ) * 5;
}

Я знаю, что вращение рассчитывается правильно (180), однако он вычисляет неправильные скорости:

X: -2.9923
Y: 0
Z: -4.00576

Теперь, когда начальная и конечная точки Z = 5, я думаю, что скорость оси Z должна быть 0?

Я что-то совсем пропустил?

0

Решение

Предполагая, что вы вызываете стандарт C / C ++ cos а также sin функции, они принимают радианы, а не градусы. Удалить * (180 / M_PI) и вы должны увидеть ожидаемый результат.

2

Другие решения

Я вижу следующие потенциальные проблемы здесь

  1. Вы конвертируете вывод atan2 в градусах и используя градусы в cos а также sin которые принимают радианы.

  2. Точное вращение, которое вы пытаетесь, не очень хорошо объяснено с точки зрения оси вращения. Я предполагаю mRotation должно быть Rotation, Во всяком случае, не ясно, какая матрица вращения применяется, поэтому я не могу сказать, какова ваша Velocity.X/Z должно быть.

1

По вопросам рекламы [email protected]