* 전체적인 내용

- 선형변환(일차변환), 아핀변환의 표현

- 기하구조의 회전, 비례, 이동을 위한 좌표 변환

- 행렬 x 행렬을 이용해서 여러 변환 행렬을 최정적인 변환 행렬로 병합

- 한 좌표계의 좌표를 다른 좌표계로 변환하는 방법과 그런 변환 행렬을 표현하는 방법

 

* 선형변환

 

- 정의

 

수학 함수 t(v) = t(x, y, z) = (x', y', z')을 살펴보면 3차원 벡터 하나를 입력 받아서 3차원 벡터 하나를 출력한다.

만일 함수t에 대해 다음과 같은 성질들이 성립할 때 t를 선형변환(linear transformation)이라고 부른다.

 

t(u + v) = t(u) + t(v) (단, u,v는 임의의 3차원 벡터이다.)

t(ku) = k * t(u) (단, k는 스칼라이다.)

 

 

- 행렬 표현

 

u = (x, y, z)라고 할 때, 이를 항상 다음과 같이 표현할 수 있다.

u = (x, y, z) = xi + yj + zk = x(1, 0, 0) + y(0, 1, 0) + z(0, 0, 1)

 

여기서 벡터 i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1)은 현재 좌표계의 축들과 같은 방향인 단위벡터인데, 이를 3차원 좌표 벡터 (x, y, z) 집합의 표준기저벡터(standard basis vector)라고 부른다.

 

만약 t가 하나의 선형변환이라고 가정하면

t(u) = t(xi + yj + zk) = x * t(i) + y * t(j) + z * t(k) 로 표현가능하다. t가 선형변환일때 가능하다.

 

이와 같은 선형변환을 행렬 표현(matrix representation)으로 나타낼 수 있다.

 

- 비례

 

비례(scaling)변환은 물체의 크기를 바꾸는 효과를 낸다.

다음과 같이 정의된다.

S(x, y, z) = (sx * x, sy * y, sz * z)

 

비례변환은 선형변환을 만족한다. // S(u + v) = S(u) + S(v), S(ku) = k * S(u)을 만족한다.

선형변환이기 때문에 S를 표준기저벡터들에게 적용시키면 S를 적용하는 변환행렬을 만들 수 있다.

 

S(i) = (sx * 1, sy * 0, sz * 0)

S(j) = (sx * 0, sy * 1, sz * 0)

S(k) = (sx * 0, sy * 0, sz * 1)

 

표준기저벡터들은 위와 같이 변환된다.

따라서 행렬과 역행렬은 다음과 같다.

 

- 회전

 

벡터 v를 축 n에 대해 회전하는 변환을 회전변환이라고 한다.

 

축 n에 대한 v의 회전을 R n(v) 라고 하고, 회전 변환을 R n(v)공식을 유도하기 위해서 회전각은 n의 진행방향 기준으로 반시계 방향으로 측정하고 n은 단위 벡터(||n|| = 1)라고 가정하고 진행한다.

 

1. v를 n에 평행한 부분n에 수직인 부분으로 분해한다.

2. 평행한 부분은 v의 n위로의 직교투영(정사영)을 진행한다. proj n (v) = (v · n)/||n||² * n = · n * n // ||n|| = 1

3. n에 수직인 부분은 prep n (v) = v - proj n (v) 로 구할 수 있다.

4. 여기서 proj n (v)는 축과 일직선 상에 있기 때문에 회전의 영향을 받지 않기 때문에 수직인 부분을 회전하는 방법을 찾으면 된다. 즉 R n(v) = proj n (v) + R n(perp n(v)) 을 찾으면 회전된 v를 구할 수 있다.

5. n x v의 크기는 ||n x v|| = ||n|| ||v|| sin(a) = ||v|| sin(a) = ||prep n(v)||

6. R n(prep n(v))는 오른쪽 그림에서 보면 R n(prep n(v)) =  sinθ * n x v + cosθ * prep n(v) 임을 알 수 있다.

7. 정리해보면 다음과 같다.

 

R n(v) = proj n(v) + R n(prep n(v))

= (v · n) * n + sinθ * n x v + cosθ * prep n(v)

= (v · n) * n + sinθ * n x v + cosθ * (v - (v · n) * n)

cosθ * v + (1 - cosθ)(v · n) * n + sinθ * n x v

 

회전축 n = (x, y, z)이고 s = sinθ, c = cosθ라고 했을 때 회전행렬 R을 표준기저벡터에 적용하여 행렬을 만들면 다음과 같다.

여기서 R의 행벡터들은 정규직교(서로 직교, 단위길이)인데, 직교행렬에서는 역행렬과 전치행렬이 같다.

 

회전축 n을 각각 x축(1, 0, 0), y축(0, 1, 0), z축(0, 0, 1)으로 하면 식이 간단해진다.

 

 

 

* 아핀변환

 

- 동차좌표

아핀변환(affine transformation, 어파인변환, 상관변환)은 선형변환에 이동변환(translation transformation, 병진이동변환)을 결합한 것이다.

 

벡터는 위치와 무관하게 오직 방향과 크기만 가지고 있기 때문에 이동에 대해 불변이여야 한다. 이동은 오직 점(위치벡터)에만 적용해야 한다. 동차좌표(homogeneous coordinate)를 이용하면 점과 벡터를 구분하지 않고 동일한 방식으로 다룰 수 있다.

 

동차좌표는 3차원벡터에 w성분을 추가한 형태이며 이 w값에 따라서

w = 0 일 때 벡터를 나타내는 동차좌표 (x, y, z, 0), w = 1 일 때 점을 나타내는 동차좌표 (x, y, z, 1)로 표현된다.

 

 

- 정의

3차원 그래픽에 필요한 변환 중에는 선형변환으로는 서술하지 못하는 것도 있다. 그래서 아핀변환이라고 부르는 좀 더 넓은 부류의 함수를 도입해야한다. 아핀변환은 선형변환에 이동벡터 b를 더한 것이다.

a는 아핀변환 t는 선형변환이라고 하면 식은 다음과 같다.

 

a(u) = t(u) + b

 

행렬로 표기하면 다음과 같다.

 

여기서 w = 1인 동차좌표를 도입하면 아핀변환을 다음과 같이 좀더 간결하게 표기할 수 있다.

이 4 x 4 행렬을 아핀변환의 행렬표현이라고 한다.

 

 

- 이동

입력 그대로 돌려주는 선형변환인 I(u) = u를 항등변환(identity transformation)이라고 한다. 행렬 표현은 단위행렬이다.

 

이동변환이란 선형변환부분이 단위행렬인 아핀변환이라고 볼 수 있다.

t(u) = uI + b = u + b

식을 보면 점 u 를 b 만큼 이동만 한다.

 

이런 아핀변환의 행렬표현을 이동행렬이라고 부르고 다음과 같이 표현된다.

 

- 비례와 회전

이동에서의 경우와 반대로 b = 0인 아핀변환을 하면 보통의 선형변환을 표현할 수 있다.

식은 다음과 같다.

 

- 좌표계 변환의 관점에서 의미

 

비례와 회전, 이동은 다른 좌표축으로 변환하는 것과 의미가 같다.

 

예를 들어 비례의 경우 새로운 좌표계의 기저벡터가 기존 좌표계의 기저벡터보다 모두 2배 크도록 설정해보면 새로운 좌표계 공간은 기존 좌표계에 비해서 늘어나고 수죽한 것이다. 기존 좌표계의 벡터 O(1, 3)와 새로운 좌표계로 사상된 벡터 N(1, 3)을 비교해보면 N(1, 3) = 2 * O(1, 3) = O(2, 6)으로 볼 수 있다.(숫자는 같아도 공간이 다르다.) 즉 변환된 벡터를을 새로운 좌표계를 기존 좌표계에서 봤을 때 2배 늘어난 것으로 보인다. 

 

회전의 경우 새로운 좌표계의 기저벡터가 기존 좌표계의 기저벡터의 방향과 반대방향이라면 새로운 좌표계 공간은 기존 좌표계를 회전한 것이다. 기존 좌표계의 벡터 O(2, 3)와 새로운 좌표계에 사상된 벡터 N(2, 3)을 비교해보면 N(2, 3) = O(-2, 3)으로 볼 수 있다.(숫자는 같아도 공간이 다르다.) 즉 변환된 벡터는 새로운 좌표계를 기존 좌표계에서 봤을 때 회전한 것으로 보인다.

 

좌표(표현하는 숫자)는 같은데, 공간이 달라져서 절대적인 값이 달라지기 때문에 팽창, 수축, 회전한다고 생각하면 편하다.

결론은 아핀변환은 좌표계를 고정하고 그 좌표계 안에서 물체 자체가 변환한다고 해석하는 것이다.

 

 

 

- 변환들의 합성

S가 비례행렬, R이 회전행렬, T가 이동행렬이라고 했을 때 이 변환들을 한 점v에 적용 시키기 위해서는 다음과 같은 과정이 필요하다.

 

((v * S) * R) * T = v'

여기서 행렬의 곱셈은 결합법칙을 만족하므로

v * (SRT) = v'로 나타낼 수 있다.

C = SRT라고 하면 v * C = v'이다. 즉 C를 계산해둔 상태라면 한번의 곱셈으로 처리할 수 있다.

 

 

* 좌표 변경 변환

- 정의

 

좌표계A와 좌표계B사이의 관계를알고 있다면, 임의의 한 벡터 좌표계A에서 상대적으로 표현된 v = (x, y)를 좌표계B에 상대적으로 표현된 v' = (x', y')를 알 수 있다.

한 좌표계의 좌표를 다른 좌표계의 좌표로 변환하는 것을 좌표 변경 변환(change of coordinate transformation)이라고 한다.

 

직관적인 예를 들어보면 섭씨온도 100도를 화씨온도 212도로 변환할 수 있고, 반대로 화씨온도 212도를 섭씨온도 100도로 표현할 수 있다. 즉 절대적인 것은 변하지 않고, 기준에 따라 표현만 달라진 것으로 해석한 것이다.

 

아핀변환의 경우 달라진 좌표값을 기존좌표계에서 실제 비례, 회전, 이동을 한다고 해석하고, 좌표 변경 변환은 새로운 좌표계  때문에 이와 다른 개념임을 알 수 있다.

 

- 벡터의 좌표 변경 변환

두 좌표계 A(기저가 각각 uA, vB), B(기저가 각각 uB, vB) 그리고 벡터 p가 존재하고 A좌표계의 p의 상대 좌표가 pA = (x, y)라고 하면

각각 A, B좌표계는 다음과 같이 표현된다.

A좌표계 : pA = xuA + yvB = pA(x, y)

B좌표계 : pB = x'uB + y'vB = pB(x', y')

 

A좌표계의 기저인 uA와 vA의 B좌표계의 상대적인 값을 안다면(각각 uA_B, vA_B라고 하자) 다음과 같이 나타낼 수 있다.

pB = x * uA_B + y * vA_B

 

3차원으로 일반화 시키면 다음과 같다.

pB = x * uA_B + y * vA_B + z * wA_B

 

 

- 점의 좌표 변경 변환

점의 경우는 위치도 중요하므로 추가로 처리를 해줘야한다.

A좌표계에서의 원점을 QA B좌표계에서의 원점을 QB이라고 하면 다음과 같다.

 

A좌표계 : pA = xuA + yvB + QA

B좌표계 : pB = x'uB + y'vB + QB

 

A좌표계의 기저인 uA와 vA를 B좌표계의 상대적인 값과 A좌표계의 원점인 QA의 B좌표계의 상대적인 값을 안다면(각각 uA_B, vA_B, QA_B라고 하자) 다음과 같이 나타낼 수 있다.

pB = x * uA_B + y * vA_B + QA_B

 

3차원으로 일반화 시키면 다음과 같다.

pB = x * uA_B + y * vA_B + z * wA_B + QA_B

 

 

- 좌표 변경 변환행렬

점이든 벡터든 현재 좌표계 기저의 새로운 좌표계에서의 값을 안다면 쉽게 변환할 수 있다. 행렬로 표현하면 다음과 같다. (uB, vB, wB, QB는 각각 위에서 uA_B, vA_B, wA_B, QA_B을 의미한다.)

 

참고로 여러번의 좌표계 변경은 하나의 행렬로 표현이 가능하다. AB => C

 

 

- 역행렬과 좌표 변경 행렬

 

벡터 p의 B좌표계 기준 좌표를 pB라고 하고 M이 좌표계 A에서 B로의 좌표 변경 행렬이라고 하자.

pB = pA * M을 만족하는 좌표 pA를 구하려고 한다.

정리하면 좌표계 B에서 A로의 좌표 변경 행렬을 구하면 된다. 

 

 

- 아핀변환과 좌표 변경 변환

 

사실 본질적으로 아핀변환과 좌표 변경 변환은 동일하다.

해석하는 관점이 조금 다른 것뿐이다.

 

아핀변환

 : 좌표계를 고정하고 그 좌표계 안에서 물체 자체가 변환한다고 해석

 

좌표 변경 변환

 : 여러 좌표계를 다루면서 물체는 변경하지 않고  좌표계만 변환함으로써 물체의 좌표 표현이 바뀐다고 해석

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수학 > 선형대수학' 카테고리의 다른 글

내적  (0) 2022.11.16
Gimbal lock(짐벌락)  (0) 2022.06.11
사원수  (0) 2021.11.12
행렬 대수 정리  (0) 2021.11.12
벡터 대수 정리  (0) 2021.11.12

+ Recent posts