axis
축으로 angle
도 만큼 시계방향으로의 회전을 나타내는 Quaternion
을 out 에 담아 돌려줍니다. Quaternion.angleAxis
로 만든 회전은 임의의 한 축에 대해서 회전하기에, 짐벌락(gimbal-lock) 현상이 없습니다.
Quaternion.angleAxis(angle, axis)
Quaternion.angleAxis(angle, axis, out)
angle
회전할 각도(degree)를 나타내는 number
.
axis
회전축을 나타내는 Vector3
. 반드시 $\|\vec{axis}\| = 1$ 인 단위 벡터이어야 하며, Quaternion.angleAxis
는 axis
가 단위벡터인지 검사하지 않습니다.
out
회전 사원수 $q = (cos(\frac{angle}{2}^\circ), \text{ }sin(\frac{angle}{2}^\circ)\cdot\vec{axis})$ 를 담을 Quaternion
. 인자를 주지 않으면 임시 변수가 생성됩니다.
axis
축이 만드는 구형평면에서 시계방향으로 angle
도 만큼의 회전을 나타내는 Quaternion
. out
인자를 주었다면, out
에 결과를 담은 후 그대로 돌려줍니다.
회전축 $\vec{n}$ 에 대하여, 시계방향으로 $\theta$ 도 만큼 회전하는 회전 사원수는 아래와 같이 정의됩니다:
$$ q = (cos(\frac{\theta}{2}), sin(\frac{\theta}{2})\cdot \vec{n}) $$
회전사원수를 위처럼 정의한 이유는, 순허수 사원수(vector quaternion)와 $q = (cos(\theta),\;sin(\theta)\cdot\vec{n})$ 형태의 사원수를 곱할 경우 로드리게스 회전 공식(Rodrigues` rotation formula)의 부분항을 얻을 수 있기 때문입니다.
$q = (cos(\frac{\theta}{2}), sin(\frac{\theta}{2})\cdot \vec{n})$ 는 그렇게 해서 얻은 식을 정리하는 과정에서 정의됩니다. 자세한 회전의 원리에 대해서는 Quaternion.mulVector() 를 읽어보시길 바랍니다.
사원수가 짐벌락 현상(gimbal-lock)이 없다는 말은 임의의 회전축에 대한 회전을 간단하게 만들어낼 수 있기 때문입니다. 즉 사원수를 사용했다고 해서 짐벌락 현상이 아예 없다는 말이 아닙니다.
Quaternion.angleAxis
처럼 하나의 회전축을 사용한다면 문제 없지만, Quaternion.euler() 는 여전히 오일러각으로 회전을 생성하므로 짐벌락 현상이 존재합니다.