Как выделить компоненты x и z в кватернионном вращении? - PullRequest
0 голосов
/ 22 января 2019

Я не могу комментировать другие посты. ShawnFeatherly в этом сообщении wrote:

Вот способ получить локальное вращение только оси Y.Эту функцию можно изменить, чтобы получить ось x или z.

/// <summary> isolate the y-Component of a rotation </summary>
private Quaternion yRotation(Quaternion q)
{
    float theta = Mathf.Atan2(q.y, q.w);

    // quaternion representing rotation about the y axis
    return new Quaternion(0, Mathf.Sin(theta), 0, Mathf.Cos(theta));
}

Это работает для меня!Но как я могу изменить это, чтобы получить xRotation и zRotation?Мое кватернионное представление (x, y, z, w).Спасибо!

1 Ответ

0 голосов
/ 30 января 2019

Насколько я знаю, вы можете сделать то же самое с другими компонентами:

float theta_y = Mathf.Atan2(q.y, q.w);

Quaternion yRotation = Quaternion(0, Mathf.Sin(theta_y), 0, Mathf.Cos(theta_y));

float theta_x = Mathf.Atan2(q.x, q.w);

Quaternion xRotation = Quaternion(Mathf.Sin(theta_x), 0, 0, Mathf.Cos(theta_x));

float theta_z = Mathf.Atan2(q.z, q.w);

Quaternion zRotation = Quaternion(0, 0, Mathf.Sin(theta_z), Mathf.Cos(theta_z));
...