Как получить представление оси и угла кватерниона в виде трех. js? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть кватернион 3. js, и я хотел бы получить его ось и угол. Возможно ли это через три. js или мне нужно сделать это:

export function getAxisAndAngelFromQuaternion(q: Quaternion) {
  const axis = [0, 0, 0];
  const angle = 2 * Math.acos(q.w);
  if (1 - q.w * q.w < 0.000001) {
    // test to avoid divide by zero, s is always positive due to sqrt
    // if s close to zero then direction of axis not important
    axis[0] = q.x;
    axis[1] = q.y;
    axis[2] = q.z;
  } else {
    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/
    const s = Math.sqrt(1 - q.w * q.w);
    axis[0] = q.x / s;
    axis[1] = q.y / s;
    axis[2] = q.z / s;
  }
  return { axis: new Vector3().fromArray(axis), angle };
}

1 Ответ

1 голос
/ 19 июня 2020

Это в коде до javascript - «экспорт»? «q: Quaternion»?
В любом случае, это относительно простой алгоритм. Упрощающее предложение:

function getAxisAndAngelFromQuaternion(q) {
  const angle = 2 * Math.acos(q.w);
  var s;
  if (1 - q.w * q.w < 0.000001) {
    // test to avoid divide by zero, s is always positive due to sqrt
    // if s close to zero then direction of axis not important
    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/
    s = 1;
  } else { 
    s = Math.sqrt(1 - q.w * q.w);
  }
  return { axis: new Vector3(q.x/s, q.y/s, q.z/s), angle };
}
...