무민은귀여워

짐벌락(gimbal lock)과 사원수(쿼터니언, quaternion) 본문

IT/기타

짐벌락(gimbal lock)과 사원수(쿼터니언, quaternion)

moomini 2021. 5. 18. 00:05
반응형

짐벌락(gimbal lock)

오일러각을 이용한 회전(=순서가 있는 3회의 회전축 회전)은 세 개의 숫자로 나타낼 수 있어 단순하고 이해하기 쉽지만 문제도 있다. 짐벌락(gimbal lock)이라는 현상이다.

 

항공기나 선박, 우주선에는 자이로스코프라는 기기로 각도와 각속도를 측정하여 자세 제어를 한다. 자이로스코프 내부에는 짐벌이라는 부품이 있어, 세 개의 고리가 각 축의 회전을 표현한다. 안쪽 고리는 바깥 고리의 회전에 연동해서 위치를 바꿈으로써 롤-피치-요와 같은 3축 자유도의 회전에 대응한다.

 

그런데, 보통은 3축의 자유도로 회전을 표현할 수 있는 짐벌 고리가 겹쳐지면서, 첫 번째 회전과 세 번째 회전의 두 개 축이 거의 일치하여 자유도가 2축으로 한정되는 사태가 발생한다. 이것이 짐벌락 현상이다.

 

 

사원수(quaternion)

여기서, 3차원 공간에서의 회전을 표현하고자 도입된 것이 바로 사원수(쿼터니언, quaternion)다. 

 

사원수에 의한 회전의 특징은 다음과 같다. 

 

  • 짐벌락이 발생하지 않는다.
  • 행렬보다 점유 메모리 영역이 작고 계산 부하도 낮다.
  • x, y, z 축에 국한되지 않는 임의의 회전축에서의 회전을 손쉽게 할 수 있다.
  • 회전을 간단히 합성할 수 있고 오차도 쉽게 발생하지 않는다.
  • 두 개 회전사이의 매끄러운 보간을 표현할 수 있다.

사원수는 복소수의 확장으로 생각할 수 있다.

 

복소수로는 실수부와 허수부의 두 개의 실수를 사용하여 2차원 복소평면 좌표로서의 벡터를 나타낼 수 있었다.

수학자 해밀턴은 2차원 평면상의 위치를 나타낼 수 있는 복소수와 마찬가지로, 3차원 공간 내의 좌표를 표현하면서 복소수처럼 다룰 수 있는 세 개의 실수를 발견하고자 했다. 

네 개의 실수를 이용하면(교환법칙은 성립하지 않지만) 곱셈과 나눗셈을 정의할 수 있다는 사실을 알아냈고 여기서 사원수의 개념이 탄생했다.

 

사원수 q는 네 개의 기저를 사용한다. 실수 1과, 복소수로부터 확장된 허수축(imaginary axes)으로서의, 실수가 아닌 i, j, k다(이 경우 i는 복소수의 허수 단위와는 다르다). 이 네 개의 기저와 실수 w, x, y, z를 사용해 사원수 q를 다음처럼 정의한다.

 

x = y = z = 0 일 때 q 는 실수(real)이고, w = 0 일 때 q 는 순허수(pure imaginary)다. 또한 w 부분을 스칼라부(scalar part), xi + yj + zk 부분을 벡터부(vector part)라고 한다.

실제로 스칼라와 벡터라는 개념은 사원수에서의 구분에서 비롯되었다.

 

복소수는 1과 i라는 두 개의 선형독립인 기저벡터로 평면을 표현할 수 있었지만, 사원수는 1, i, j, k라는 네 개의 선형독립인 기저벡터로 4차원 공간을 나타낸다.

 

사원수 q = w + xi + yj + zk는 w, x, y, z의 조합으로 다음처럼 표기한다.

 

q = [w x y z]

 

스칼라부의 w와 나머지 벡터부를 구별해서 다음과 같이 표기할 수도 있다.

 

q = [w (x y z)]

 

또한, 스칼라부를 나타내는 스칼라 s 와 벡터부를 나타내는 벡터 v로 표기하기도 한다.

 

============================================================================

 

(참고) 유니티에서...

 

오일러각에도 장점은 있다. 그것은 세 개 각도의 조합이라는, 단순하면서도 인간이 이해할 수 있는 수치로 회전을 표현할 수 있다는 점이다. 유니티의 Transform의 UI는 그 점을 중시하여, 인간이 직관적으로 오브젝트의 기울기를 설정할 수 있도록 오일러각을 Rotation으로서 Inspector UI에 공개한다. 그 대신, 유니티 내부에서는 회전은 항상 사원수로 정리된다. 한편, 모델 뷰 변환 행렬로서 유니티에서 GPU상의 셰이더 프로그램에 전달될 때는, 회전은 행렬로 변환된다.

반응형

'IT > 기타' 카테고리의 다른 글

[그래픽스] 빛 조명 프레넬 효과  (0) 2021.05.18
Readme 파일에 이미지 넣기 (마크다운 이미지)  (6) 2021.05.18
memo) redis 패턴으로 데이터 삭제  (0) 2021.05.17
stack 구현  (0) 2021.05.17
list 구현  (0) 2021.05.17
Comments