У меня небольшие проблемы с моей игрой. Я пытаюсь заставить мяч двигаться из одной точки в другую. Вот мой код:
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?
Я что-то совсем пропустил?
Предполагая, что вы вызываете стандарт C / C ++ cos
а также sin
функции, они принимают радианы, а не градусы. Удалить * (180 / M_PI)
и вы должны увидеть ожидаемый результат.
Я вижу следующие потенциальные проблемы здесь
Вы конвертируете вывод atan2
в градусах и используя градусы в cos
а также sin
которые принимают радианы.
Точное вращение, которое вы пытаетесь, не очень хорошо объяснено с точки зрения оси вращения. Я предполагаю mRotation
должно быть Rotation
, Во всяком случае, не ясно, какая матрица вращения применяется, поэтому я не могу сказать, какова ваша Velocity.X/Z
должно быть.