2022. 11. 9. 21:04ㆍPublic/Math
3차원 그래픽은 3차원 세계의 물체들을 기하학적으로 묘사한다. 좀 더 구체적으로 말하면, 물체의 외부 표면을 근사(approximation)하는 일단의 삼각형들로 물체를 표현한다. 그런데 그런 물체들이 전혀 움직이지 않는다면 그리 흥미로운 장면이 아닐 것이다. 따라서 물체를 나타내는 기하구조(geometry)를 어떤 형태로든 변환(transformation)할 필요가 있다.
3차원 그래픽에 쓰이는 주된 기하학적 변환은 이동변환과 회전변환, 비례변환이다. 이번 장에서는 3차원 공간의 점과 벡터를 변환하는 데 사용할 수 있는 행렬 방정식들을 살펴본다.
목적
- 선형변환(일차 변환)과 아핀변환을 행렬로 표현하는 방법을 이해한다.
- 기하구조의 회전, 비례, 이동을 위한 좌표 변환을 배운다.
- 행렬 대 행렬 곱셈을 이용해서 여러 변환 행렬을 최종적인 하나의 변환 행렬로 결합(합성)하는 방법을 살펴본다.
- 한 좌표계의 좌표를 다른 좌표계로 변환하는 방법과 그러한 변환을 행렬로 표현하는 방법을 파악한다.
- DirectXMath(xnamath)라이브러리가 제공하는 여러 변환 행렬 구축 함수들에 익숙해진다.
선형변환
정의
수학 함수
을 생각해 보자. 이 함수는 3차원 벡터 하나를 입력 받아서 3차원 벡터 하나를 출력한다. 만일 함수 t에 대해 다음과 같은 성질들이 성립하면, 그리고 오직 그럴 때에만, t를 가리켜 선형 변환(linear transformation)이라고 부른다.
여기서
와
는 임의의 3차원 벡터이고 k는 스칼라이다.
예3.1
함수
을 생각해 보자. 예를들어
이다. 이 함수는 선형변환이 아니다.
k = 2와 u = (1,2,3)에 대해
이지만
이기 때문이다. 즉, 식 3.1의 두 번째 성질이 성립하지 않는다.
만일 t가 선형변환이면 다음이 성립한다.
이 결과* 를 다음 절에서 사용할 것이다.
*옮긴이 : 수학에 관련된 문맥에서, 증명된 또는 자명하게 유도된 명제나 공식을 종종 '결과(result)'라고 부른다.
행렬표현
u = (x,y,z)라고 할 때, 이를 항상 다음과 같이 표현할 수 있음을 주목하기 바란다.
벡터 i = (1,0,0) , j = (0,1,0) , k = (0,0,1) 은 현재 좌표계의 축들과 같은 방향인 단위벡터들인데, 이들을
에 대한 표준기저 벡터(standard basis vector)라고 부른다.
은 모든 3차원 좌표 벡터 (x,y,z) 의 집합을 뜻한다.
이제 t가 하나의 선형변환이라고 하면, 그 선형성(식3.2)에 의해 다음이 성립한다.
이것이 제 2장에서 본 선형결합(일차결합)에 지나지 않음을 주목하기 바란다. 따라서 이를 벡터와 행렬의 곱으로 표현할 수 있다. 즉. 식2.2에 의해 식 3.3을 다음과 같이 표현할 수 있다.
여기서
이고
이다. 이러한 행렬 A를 선형변환 t의 행렬 표현(matrix representation)이라고 부른다.
비례
비례(scaling:확대.축소) 변환은 물체의 크기를 바꾸는 효과를 낸다. [그림 3.1]에 비례변환의 예가 나와 있다. 비례변환은 다음과 같이 정의된다.
이 변환은 현재 좌표계를 기준으로 하여 벡터를 x 축으로 s_{x} 단위, y 축으로 s_{y} 단위, 그리고 z 축으로 s_{z}단위만큼 비례한다. 그럼 이 S가 실제로 하나의 선형변환임을 증명해 보자. 다음이 성립한다.
여기서 보듯이 S는 식 3.1의 두 성질을 만족하므로 선형변환이다. 그러므로 행렬 표현이 존재한다. 그 행렬 표현을 구하려면 그냥 식 3.3에서처럼 S를 표준기저벡터들 각각에 적용하고, 결과로 나오는 벡터들을 행들로 하는 행렬을 만들면 된다(식3.4에서처럼) 비례된 기저벡터들은 다음과 같다.
따라서 S의 행렬 표현은
이다. 이 행렬을 비례행렬(scaling matrix)이라고 부른다.
비례행렬의 역은 다음과 같이 주어진다.
예3.2
최솟점(-4,-4,0)과 최댓점 (4,4,0)으로 정의된 사각형을 z축은 그대로 두고 x축으로 0.5단위, y축으로 2단위 비례해 보자. 해당 비례행렬은 다음과 같다.
이제 사각형을 실제로 비례(변환)하려면, 최솟점과 최댓점에 이 행렬을 곱하면 된다.
[그림3.2]에 변환 결과가 나와있다.
회전
- 아래 기호 \perp
- 수선(perpendicular):어떤 일정한 직선 또는 평면에 수직인 직선을 뜻한다.
- 수직 은 영어로 perpendicular
- proj = 사영벡터(projection의 약자'사영')
- "벡터 - 길이와 단위벡터" 게시글 참고
이번 절에서는 [그림3.3]에서처럼 벡터 v를 축 n에 대해 회전하는 변환을 살펴본다. 이러한 변환에서 회전각은 n을 내려다보는 방향(즉, n의 반대 방향)을 기준으로 시계방향으로 측정한다. 또한, ||n|| = 1 이라고 가정한다.
우선 v를 두 부분으로 분해한다.
하나는 n에 평행한 부분이고 또 하나는 n에 수직인(직교)부분이다. 평행한 부분은 그냥
이다(예1.5 참고). 수직 부분은
로 주어진다
(역시 예1.5를 참고할 것. n이 단위벡터이므로
n이다).
여기서 핵심은, n에 평행한 부분이
는 회전에 대해 불변(invariant)이므로 (즉, 벡터가 회전해도 변하지 않으므로), 수직인 부분을 회전하는 방법만 알아내면 된다는 것이다. [그림3.3]에서 보듯이 회전된 벡터 R_{n}(v) 는
이므로
만 구하면 된다.
을 구하기 위해, 회전 평면에 하나의 2차원 좌표계를 설정한다. v_{\perp}를 두 기준 벡터(reference vector)중 하나로 사용한다. 다른 하나는 v_{\perp} 와 n에 수직인 벡터이어야 한다. 그러한 벡터는 외적 n x v (왼손 엄지 법칙)로 구하면 된다.
[그림3.3]과 제 1장 연습문제 14의 삼각함수 공식들에 의해
이다(여기서 a는 n과 v 사이의 각도). 이 식에서 보듯이 두 기준 벡터는 크기가 같다. 그리고 둘 다 원(회전 평면)의 원점에 놓여 있다. 이제 필요한 기준 벡터 두 개가 마련되었다. 삼각함수에 의해, 이들에 대해 다음이 성립한다.
이로부터 다음과 같은 회전 공식을 끌어낼 수 있다.
'Public > Math' 카테고리의 다른 글
선형대수(Linear Algebra)(작성중) (수학으로 시작하는 3D 게임 개발) (0) | 2022.11.17 |
---|---|
선형보간 공식 (0) | 2022.11.10 |
벡터 정리 (0) | 2022.11.09 |
[벡터]길이와 단위벡터 (1) | 2022.11.06 |
행렬식 (0) | 2022.10.10 |