공부/인프런 - 청강대_이득우

6. 회전에 대한 수학 2 – 사원수

셩잇님 2022. 11. 29. 08:51
반응형

 

 

회전에 대한 수학 2 – 사원수 🐱‍💻

 


 

이번 영상에서는 사원수에 대해 이야기하겠습니다. 앞서 3차원 회전을 표현하는 데 있어서 -각 방식오일러 방식 두 가지가 있다고 말씀드렸습니다. 각각은 장단점이 있다고 설명했습니다.

 

축-각 방식은 행렬로 변환하기 어려워렌더링 파이프라인의 중간에 있는 파이프라인 흐름이 끊기게 된다고 했습니다. 오일러 각 방식은 축에 대해 부드럽게 움직이는 회전을 계산하기가 어렵고 짐벌락 현상이 발생한다고 했습니다. 이 두 가지의 중간 포지션에서 문제점을 해결해줄 수 있는 솔루션이 있습니다. 그것이 바로 사원수입니다. 이번 영상에서는 사원수를 사용해 3차원 회전을 어떻게 안정적으로 구현하는지 그 구조와 원리에 대해 설명하겠습니다.

 

사원수란? 네 개의 원소로 구성된 수

실수 : a

사원수 : a + bi + cj + dk

사원수는 우리가 일상생활에서 사용하는 실수와 같은 수입니다. 아니 수가 4개로 구성되어 있다니? 이상하죠? 그렇다면 수란 무엇일까요? 수학에서의 수는 집합의 관점에서 얘기합니다. 다음과 같이 R이라는 심벌, 리얼 넘버의 약자입니다. 이 실수란 집합을 시각화할 때 보통 이렇게 수직선을 사용합니다.

 

 


 

하나의 수를 하나의 수직선 위에 점에 대응하고 그 점이 빈틈없이 꽉 채워져 모여있으면 개념적인 무한의 요소를 가지는 실수가 됩니다. 그런데 이렇게 단순한 집합개념에서 수를 바라보는 것은 한계가 있습니다. 왜냐하면, 집합이란 단지 원소들의 묶음을 의미하기 때문입니다. 수가 다른 집합과 가지는 차별점은 앞서 설명한 사칙 연산에 있습니다. 사칙 연산이란 수와 수를 사용해 두 개를 결합해 새로운 수를 만들어내는 시스템을 의미합니다. 이러한 시스템을 구조를 가진 집합이라고 표현합니다. 수가 가진 이런 연산 체계를 분석해서 다음과 같은 성질을 도출했습니다.

 

 

이러한 성질들을 만족할 수 있는 체계, 이것이 만족이 된다면 몇 개로 구성이 되어 있든 간에 수라고 부를 수 있습니다. 여러 요소로 구성된 수 중에서 대표적으로 복소수가 있습니다.

 

복소수 : 두 개의 원소로 구성된 수

실수 : a

복소수 : a + bi

 

복소수는 우리가 사용하는 실수와 허수로 구성된 일상생활에서 사용하지 못하는 특이한 수입니다. 하지만 앞서 설명한 연산 체계라는 시스템이 빈틈없이 잘 동작하기 때문에 우리가 수라고 부를 수 있습니다. 이 복소수에서 개념이 확장된 수가 바로 4개로 구성된 사원수입니다.

 

 

사원수는 실수와 3종류의 허수로 구분되어 있습니다. 이 역시도 연산 체계가 잘 동작하기 때문에 수라고 부를 수 있습니다. 이러한 수의 체계를 이번 영상에서 자세히 설명할 수 없지만, 간단히 한마디로 요약하면 모든 회전이란 크기가 1인 수와의 곱이다. 라는 짤막한 문장으로 요약할 수 있습니다. 먼저 우리가 사용하는 실수를 살펴보겠습니다. 어떤 수에 1을 곱한 결과는 언제나 같은 수를 나타냅니다.

 

이는 회전에 관점에서 보면 0도 회전했다, 즉 회전인데 아무런 회전이 들어가지 않았다. 라고 볼 수 있습니다.

 

 

실수에서 크기가 1인 다른 수로는 –1이 있습니다. 어떤 수에 –1을 곱하면 부호가 반대인 수를 만들어냅니다. 이는 곧 180도 회전이라고 볼 수 있습니다.

 


 

 

실수에는 이 2가지 외에는 크기가 1인 수가 존재하지 않습니다. 사실 실수는 평면이 아닌 직선이기 때문에 우리가 회전을 논하는 것이 큰 의미가 없습니다 하지만 어떤 평면을 나타내는 수가 있다면 어떻게 될까요? 앞서 언급한 실수와 허수로 구성된 복소수는 평면으로 구현할 수 있습니다. 이것을 복소평면이라고 합니다.

 

 

복소평면은 실수를 X축, 허수를 Y축으로 두고 다음과 같이 좌표를 표현합니다. 그렇다면 여기서 크기가 1인 수는 어떤 것들이 있을까요?

 

 

앞선 영상에서 배운 삼각함수를 활용하면 (cos θ, sin θ)의 조합으로 크기가 1인 복소수를 표현할 수 있습니다. 복소수 체계가 가진 곱셈 연산을 사용해서 임의의 복소수에 크기가 1인 복소수를 서로 곱하면 우리가 주어진 각(θ)만큼 회전이 발생하는 것입니다.

 

이것의 원리를 직접 알아보겠습니다.

 

 

복소수 (cosθ, sinθ) = 두 번째 항목에 허수 i를 붙여 cosθ + sinθi로도 표현합니다

여기서 표현한 i는 허수부라고 부릅니다. 이것을 두 번 곱한 결과는 –1인 실수가 되는 수입니다.

 

 

두 개의 임의의 복소수 (a + bi) * (c + di)를 곱하면 ac + bdi^2 + (ad + bc)i가 됩니다.

여기서 i^2은 –1이 된다고 했습니다. 그래서 위의 복소수 곱셈은 다음과 같이 전개됩니다.

 

 

그렇다면 임의의 복소수 (x + yi )에 아까 제가 설명한 크기가 1인 복소수인 (cosθ + sinθi)를 서로 곱하면 어떻게 될까요? 이 식을 보니까 지난 번에 설명한 회전 변환의 식과 완전히 동일합니다. 따라서 크기가 1인 복소수의 곱은 평면의 회전변환을 의미합니다. 즉. 크기가 1인 복소수의 곱 = 평면에서의 회전변환과 동일하다.

 

 


 

이러한 복소수 체계와 유사하게 3차원 공간의 회전을 나타내는 어떤 수 체계도 있겠죠?

아일랜드 출신의 해밀턴이라는 수학자가 3차원 공간에서 동작하는 수 체계를 찾기 위해 10년 동안 연구를 했습니다. 이를 만족하는 빈틈없는 연산 체계를 찾을 수 없었습니다. 이분이 연구가 진전되지 않아 어느 날 다리를 건너다가 ‘어? 3차원이 아니라 4차원의 관점에서 이 체계를 생각해보자.’라는 영감이 불쑥 떠올랐습니다. 그래서 급하게 건너던 다리를 내려서 이 아이디어를 다리에 새겼습니다. 지금은 새긴 자국이 지워졌지만, 다음과 같은 명패가 붙었습니다. 이 해밀턴이 발견한 4차원의 수의 체계가 바로 사원수입니다.

 

사원수는 앞서서 설명한 것처럼 하나의 실수와 3개의 허수 I, j, k로 구성됩니다. 이를 3차원 공간에서 응용할 때는 3가지 허수 I, j, k를 각 3차원 x, y, z에 대응을 시키고 나머지 1차원을 0으로 두어 다룹니다. 해밀턴이 처음 사원수를 발견할 때 3개의 허수를 묶어 벡터라고 표현하고, 나머지 한 개의 실수를 스칼라라고 불렀습니다, 물론 지금은 용어의 정의가 달라졌습니다.

 

 

이러한 사원수의 곱셈 연산은 요소가 4개이다 보니 많이 복잡합니다.

 

 

이것을 벡터와 실수, 두 가지로 구분해서 계산하면 벡터의 내적과 외적으로 요약됩니다. 신기하죠?

 

사원수도 복소수와 마찬가지로 크기가 1인 사원수의 곱셈은 사차원 공간의 임의의 회전을 나타냅니다.

4차원 공간에서 크기가 1인 사원수는 어떤 것들이 있을까요? 이러한 수는 대표적으로 다음과 같이 (cosθ, sinθ) = cosθ + sinθv->로 표현됩니다.

 

 

이 체계는 4차원에서 실수부가 커지면 3차원 영역이 줄어들고 3차원 영역이 커지면 실수부가 줄어드는 관계를 가집니다. 하지만 우리에게 필요한 것은 4차원 공간의 회전이 아니고 3차원 공간의 회전입니다.

 

 

안정적인 3차원 공간의 회전을 구축하기 위해서 그림과 같이 3차원 공간의 축-각 방식의 회전을 사원수로 대신해봤습니다. 이를 전개하면 각을 절반으로 나뉜 크기가 1인 사원수와 그 반대 방향으로 진행하는 크기가 1인 사운수의 곱으로 표현할 수 있습니다. 따라서 우리가 사용할 3차원 공간에서 임의의 축 n에 대해서 각 θ 만큼 수행하는 회전 역시 크기가 1인 사원수와의 곱으로 표현이 가능해집니다. 이 사원수의 곱셈을 쭉 정리해보면 여러 과정을 거쳐 짤막하게 벡터의 외적 식으로 떨어집니다. 벡터의 외적 식은 게임 엔진에서 사용하는 3차원 공간의 벡터를 돌리는 기본 회전공식으로 사용이 됩니다.

 


 

이러한 사원수의 회전 시스템을 어떻게 게임 엔진이 사용하는지에 대해 정리해보겠습니다.

 

 

사원수는 이러한 외적 연산을 활용해 빠르고 간편하게 회전을 처리하는 계산방법이라고 할 수 있습니다.

하지만 -각 방식인 데다가 일반적인 주어진 각을 사용하는 것이 아니라 절반의 각을 사용하기 때문에 일반 사람들이 사원수 체계를 이해하고 이것을 사용해서 어떤 회전을 지정하기가 굉장히 까다롭습니다.

 

그래서 게임 제작 단계에서는 고정된 각을 측정하기 위해서는 오일러 각 방식을 사용합니다. 하지만 사원수가 제공하는 축-각 방식은 부드러운 회전이나 짐벌락 같은 문제를 예방할 수 있기 때문에 내부적으로 회전을 계산할 때에는 유용하게 사용할 수 있습니다. 그리고 사원수는 행렬로 변환이 쉽습니다.

 

 

이것들을 정리하면 지금 보이는 그림과 같이 게임 엔진들이 회전 시스템을 구축한다고 요약할 수 있습니다. 먼저 회전에 관련된 모든 계산은 내부적으로 사원수 체계를 이용해 진행합니다. 하지만 콘텐츠 개발자들이 게임 콘텐츠를 만들 때는 지정된 각을 다루기 편하도록 사용자 인터페이스 방식에서는 오일러 방식으로 변환하여 보여줍니다. 이렇게 해서 회전을 담당하는 사원수에 대해 알아보았습니다.

 

지금까지 게임 제작에 사용하는 여러 수학에 대해 알아보았습니다. 영상에서 궁금한 점이나 더 알고 싶은 점들이 있으면 댓글을 남겨주세요. 댓글을 통해 새로운 영상을 만들 때 참고하겠습니다. 지금까지 시청해주셔서 감사합니다.

반응형