Как перевести вектор в углы эйлера? c++

334
26 ноября 2016, 19:00

Пытаюсь восстановить код функции:

QAngles = vecDir.ToEulerAngles ( &vecUp );

https://developer.valvesoftware.com/wiki/QAngle vecDir и vecUp векторы.

vecUp может быть 0

QAngles = vecDir.ToEulerAngles ( );

Можете что подсказать?

В интернете нашел, но не знаю откуда взять w или r.

void Quaternion::ToEulerAngles(Vector3D & v) const
{
    float sqw = w * w;
    float sqx = x * x;
    float sqy = y * y;
    float sqz = z * z;
    float unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
    float test = x * y + z * w;
    if (test > 0.499f * unit) // singularity at north pole
    {
        v.y = 2.0f * atan2f(x, w);
        v.z = FLOAT_PI / 2.0f;
        v.x = 0.0f;
        return;
    }
    if (test < -0.499f * unit) // singularity at south pole
    {
        v.y = -2.0f * atan2f(x, w);
        v.z = -FLOAT_PI / 2.0f;
        v.x = 0;
        return;
    }
    v.y = atan2f(2.0f * y * w - 2.0f * x * z, sqx - sqy - sqz + sqw);
    v.z = asinf(2.0f * test / unit);
    v.x = atan2f(2.0f * x * w - 2.0f * y * z, -sqx + sqy - sqz + sqw);
    return;
}
Vector3 
Quaternion::toEulerAngles() const
{
   float sqw = r * r;    
   float sqx = x * x;    
   float sqy = y * y;    
   float sqz = z * z;    
   Vector3 euler(
      atan2( 2.0f * (x * y + z * r), sqx - sqy - sqz + sqw),            
      asin( -2.0f * (x * z - y * r)),
      atan2( 2.0f * (y * z + x * r), -sqx - sqy + sqz + sqw));
   return euler;
}
READ ALSO
Тип HANDLE. Как значение дескриптора записать в строку?

Тип HANDLE. Как значение дескриптора записать в строку?

Создаю дескриптор текстового файла HANDLE file = CreateFile(

381
Иницилизация нескольких переменных

Иницилизация нескольких переменных

Можно ли в C++ объявить несколько переменных и сразу присвоить одинаковое значение? Пример:

215
Проблемы с отрисовкой в SDL и ошибка SIGSEGV

Проблемы с отрисовкой в SDL и ошибка SIGSEGV

Здравствуйте! У меня проблема с функцией для вывода объекта в SDL

243