- 개요
회전 사원수 q를 사용하여 임의의 회전축 n에 대해 3차원 공간의 벡터 v를 각 θ만큼 회전시키는 방법을 알아본다
- 전개
1) 문제점
3차원 공간의 벡터 v는 순허수 사원수에 대응되는 개념이다
벡터 v의 값을 (x, y, z)로 표시하고, 회전축 n의 값을 (a, b, c)로 지정한다
이때 회전축은 단위 벡터이므로 a2 + b2 + c2 = 1의 조건을 지닌다
그리고 회전축 n으로 각 θ만큼 회전시키는 회전 사원수 q는 (cosθ, sinθ · n)의 값을 지닌다

따라서 회전 사원수 q를 사용하여 벡터를 회전시키는 방법은 다음과 같은데,
회전 사원수를 벡터의 왼쪽에 배치하고 둘을 곱하는 것이다
이때 사원수의 곱셈은 교환법칙이 성립하지 않으므로 곱하는 순서에 항상 신경써야 한다
그러나 계산 결과에서 알 수 있듯이 계산 결과가 일반 사원수로 계산된다
최종적으로 이 곱의 결과는 순허수 사원수와 1 : 1로 대응했던 3차원 공간의 규격에서 벗어나므로 사용할 수 없다
따라서 3차원 공간에서 벡터를 회전시키는 용도로 사원수를 사용하기 위해서는
사원수 곱셈의 결과가 항상 순허수 사원수가 되는 특별한 수식을 발견해야 한다
2) 특별한 수식의 계산 (1)

회전 사원수의 벡터 n은 회전축의 역할을 수행한다
그리고 해당 벡터는 로드리게스 회전 공식의 축-각 회전에 대응한다

이때 회전시킬 벡터를 v로 정하고 이를 회전축 n에 대해서 평행한 성분과 수직인 성분으로 나눈다
그럴 경우 위와 같이 수평인 성분을 v||로, 수직인 성분을 v⊥로 표시하면 위의 식이 성립된다

회전시킬 벡터 v를 수직 성분과 수평 성분으로 분리하면 위와 같이 표현할 수 있다
이때 각 θ만큼 회전시킨 벡터를 v`라고 표현한다

이때 구하고자 하는 최종 회전의 벡터 v`는 위와 같이
회전축에 수직인 성분만 회전시킨 후에 수평 성분을 그대로 더하여 계산할 수 있다
3) 특별한 수식의 계산 (2)

2)에서의 최종 회전의 벡터 v`은 위와 같이 계산할 수 있다

오일러 공식을 활용하여 회전 사원수 q를 위와 같이 자연지수함수로 변환하는 것이 가능하다

이때 우변의 두 번째 항인 회전 사원수와 벡터와의 곱셈은 위와 같이 간략하게 전개된다
최종적으로 회전축에 수직인 벡터와 회전 사원수의 곱셈으로 얻어지는 사원수는
항상 실수부 값이 0인 순허수 사원수가 되므로, 결과값이 언제나 3차원 공간의 벡터에 대응함을 알 수 있다
4) 특별한 수식의 계산 (3)

3)에서의 계산식을 구성하는 우변의 두 번째 항의 순서를 바꿔서 계산하면
처음 식과 동일하므로 회전축과 직교하는 벡터에 대해서는 위와 같은 식이 성립된다

회전축에 평행한 벡터 v||의 회전 사원수 곱이 가지는 성질은 위와 같다
평행한 두 벡터의 외적은 영벡터가 되어 외적 부분이 사라지므로 항상 교환법칙이 성립한다

다음으로 각 θ 만큼의 회전 사원수의 값은 각 θ/2 만큼의 회전 사원수를 제곱한 결과와 동일하다

회전 사원수와 그 켤레 사원수와의 곱은 아무런 변화가 없는 0°회전을 만들어내므로
이들의 곱셈은 곱셈의 항등원 1에 대응한다

최종적으로 위와 같이 회전 사원수를 사용한 3차원 공간에서의 회전을 전개할 수 있다
5) 특별한 수식의 계산 (4)

4)에서의 식을 자연지수함수가 아닌 사원수의 형태로 간략하게 바꾸어 표현한다
단, 각 θ가 아닌 각 θ/2를 사용하는 방식으로 표현하고 회전 사원수를 q로, 켤레 사원수를 q*로 표현한다

회전 사원수 q의 실수부와 허수부를 각각 실수 w와 벡터 r로 표시하여 식을 간단하게 전개한다

전개된 식에서 실수부와 허수부를 각각 전개하면
최종적으로 v + 2w(r × v) + 2(r × (r × v))의 최종값에서 2(r × v)를 벡터 t로 치환하면 위와 같이 식이 정리된다
만약, 각 θ/2가 아닌 각 θ를 사용하게 되면 로드리게스 회전 공식이 유도되어 표현이 더 복잡해진다
- 같은 회전축에 2개의 다른 각을 연속해서 회전하는 경우

같은 회전축에 2개의 다른 각을 연속해서 회전시키는 경우를 위와 같이 표현하였다
첫 번째 각의 크기를 2α, 두 번째 각의 크기를 2β로 지정한다
첫 번째 회전을 적용한 벡터를 v`로 지정하고, 두 번째 회전을 적용한 벡터를 v``로 지정한다

최종적으로 동일한 회전축에 대한 서로 다른 2개의 회전 사원수의 곱은
두 각을 더한 회전 사원수와 동일한 것을 확인할 수 있다
- 예제에서의 활용
1) 벡터를 회전시키는 함수의 구현

프로젝트에서 사용하는 사원수에 대한 Quaternion 구조체의 RotateVector 함수를 정의한다

코드는 위의 계산식을 반환하는 함수로서 다음과 같이 구성하였다
- 사원수의 회전 사원수의 벡터부를 로컬 변수 q에 저장 + q의 값은 r에 대응
- 계산량 축소를 위해 회전축과 벡터를 외적하고 결과값을 2배하여 로컬 변수 t에 저장 + t의 값은 t에 대응
- 멤버 변수 w는 w에 대응 + 최종 계산된 회전 벡터의 값을 반환
2) 사원수의 곱셈 연산

* 연산자를 오버로딩하여 사원수간의 곱셈과 사원수와 벡터간의 곱셈을 처리한다
사원수간의 곱셈은 다음과 같이 구성하였다
- 로컬 변수 result를 사용하여 사원수간의 곱셈 연산의 결과값을 저장
- 현재 사원수의 허수부와 인자로 받은 사원수의 허수부를 각각 로컬 변수 v1과 v2에 저장
- 두 사원수의 실수부는 내적을 사용하여 계산하고 result 변수의 실수부에 저장
- 두 사원수의 허수부는 외적을 사용하여 계산하고 v 로컬 변수에 저장
- 로컬 변수 result의 허수부에 v 로컬 변수의 값을 저장
- 최종 계산된 사원수간의 곱셈 결과를 반환
사원수와 벡터간의 곱셈은 다음과 같이 구성하였다
- 인자로 받은 Vector 값을 사용하여 사원수를 통해 계산된 회전 벡터의 값을 반환
- 최종 정리
최종적으로 회전 사원수와 회전 사원수의 곱셈은 두 각을 합한 사원수에 대응하며
회전 사원수와 3차원 벡터의 곱셈은 사원수로 표현된 회전축과 각으로 벡터를 회전한 결과에 대응한다
'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| 사원수의 회전 (1) (0) | 2026.09.23 |
|---|---|
| 사원수 (2) 사원수와 벡터 (0) | 2026.09.16 |
| 사원수 (1) (0) | 2026.09.16 |
| 오일러 공식 (5) 오일러 공식 (0) | 2026.09.09 |
| 오일러 공식 (4) 매클로린 급수 (0) | 2026.09.09 |