Мне нужно рассчитать 2 угла (рыскание и тангаж) для трехмерного объекта, чтобы столкнуться с произвольной трехмерной точкой. Эти вращения известны как вращения Эйлера просто потому, что после первого вращения (скажем, Z, на основе рисунка ниже) ось Y также вращается вместе с объектом.
Это код, который я использую, но он не работает полностью. Когда на плоскости земли (Y = 0) объект правильно вращается, чтобы смотреть на точку, но как только я перемещаю точку вверх по Y, вращения не выглядят правильными.
// x, y, z represent a fractional value between -[1] and [1]
// a "unit vector" of the point I need to rotate towards
yaw = Math.atan2( y, x )
pitch = Math.atan2( z, Math.sqrt( x * x + y * y ) )
Знаете ли вы, как рассчитать 2 угла Эйлера для данной точки?
На рисунке ниже показано, как я вращаюсь. Это углы, которые мне нужно рассчитать. (Единственная разница в том, что я вращаю объект в порядке X, Y, Z, а не Z, Y, X)
Это моя система.
- система координат x = вправо, y = вниз, z = дальше назад
- объект по умолчанию находится в точке (0,0,1), которая обращена назад
- Вращения имеют порядок X, Y, Z, где вращение на X является шагом, Y - отклонением, а Z - вращением.