Quaternion
Quaternion은 1개의 실수와 3개의 허수로 구성되는 수 체계이며 주로 3d 점의 회전을 처리하기 위해 사용된다. 이것은 Euler Angle 사용시 겪을 수 있는 gimbal lock 문제를 해결할 수 있다. gimbal lock 문제는 회전 축 중 하나가 다른 하나와 평행하게 되면서 결과적으로 회전의 자유도가 줄어드는 현상을 말한다. 예컨대 축으로 90도 회전하면 와 축이 같은 평면 상에 놓이게 되어 두 축이 겹친다.
쿼터니언은 다음과 같은 형식으로 표현된다.
여기서 는 실수이고, 는 허수인 기저 벡터이다.
이것은 같은 벡터 형식으로도 표현될 수 있다.
쿼터니언의 는 다음의 성질을 갖는다.
이를 다음과 같은 표 형식으로 나타낼 수 있다.
↓ × → | ||||
Rotation
점 을 각도 로 회전하는 것을 쿼터니언을 이용하여 계산하려면 회전축 벡터 와 회전 쿼터니언 가 필요하다.
우선 회전축 벡터 를 다음과 같이 정의한다.
여기서 의 계수 는 회전하려는 각 축에 대한 기여도를 나타낸다. 예컨대 축으로만 회전한다면 가 된다.
만일 2개 이상의 축으로 회전하려면 각각의 기여도를 정규화하여 계산하면 된다. 예컨대 축과 축으로 동일한 비율로 회전하려 한다면 가 되고 이를 정규화하면 가 된다. 한편 축으로 만큼, 축으로 만큼 회전하려 한다면 가 되고 이것을 정규화하면 가 된다.
다음으로 회전축 벡터 를 이용하여 회전 쿼터니언 를 정의한다. 이것은 지수 함수의 테일러 전개와 Euler 공식의 확장을 사용한다.
참고로 의 길이는 로 정의되며 인 경우 unit quaternion이라 한다.
추가로 의 켤레는 로 정의되며 가 unit quaternion인 경우 이 된다.
쿼터니언으로 3d 회전을 표현하기 위해 다음의 절차를 따른다.
1.
회전할 축을 고려하여 회전축 벡터 를 구한다.
2.
회전축 벡터 와 회전각도 에 대해 회전 quaternion 을 구한다.
3.
회전할 점 을 쿼터니언 형식 으로 변환한다.
4.
회전 쿼터니언 와 그것의 역수 를 사용하여 다음과 같이 계산하여 점 의 회전된 점 를 구한다.
여기서에서 이며 는 의 켤레이다. 가 정규화 되었다면 이므로 역수 대신 켤레를 이용해서 회전을 계산할 수도 있다.
예컨대 를 축을 중심으로 90도 회전하는 경우 다음과 같이 계산된다.
1.
z축으로만 회전하므로 로 계산한다.
2.
회전축 벡터 와 각도 90도를 이용하여 회전 쿼터니언 을 다음과 같이 구한다.
이를 벡터 형식으로 작성하면 가 된다.
3.
회전할 점을 쿼터니언 형식으로 변환한다.
4.
회전 쿼터니언의 길이 가 1이므로 의 켤레 를 이용하여 다음과 같이 를 구한다.
고로 이 된다.
참고로 회전 쿼터니언 이 스칼라 부분을 갖고 있지만, 회전 시키려는 점 의 쿼터니언 표현에서 스칼라는 0이 되고 허수 부분만 남게 되므로 의 결과에서 스칼라 부분은 항상 0이 되고 허수 부분만 존재하게 된다. 거기에 다시 스칼라를 가진 을 곱하더라도 허수 부분이 곱해지므로 결국 허수 부분만 남게 되어 의 결과는 항상 허수만 남게 된다. 따라서 의 결과에서 스칼라를 고려하지 않고 의 계수만 취해서 다시 좌표 형식으로 변환할 수 있다.
Rotation Matrix
회전 쿼터니언 을 다음과 같은 회전 행렬 로 변환할 수 있다.
예컨대 를 축을 중심으로 90도 회전하는 위의 예시에서 구한 회전 쿼터니언 를 위 회전 행렬에 적용하면 다음과 같이 계산된다.
회전하려는 하는 점이 이므로 다음과 같이 계산된다.
고로 이 된다.