개발하는 리프터 꽃게맨입니다.

[수학] 아핀 공간: 움직이는 가상 세계의 구축 본문

컴퓨터 그래픽스/수학

[수학] 아핀 공간: 움직이는 가상 세계의 구축

파워꽃게맨 2024. 7. 11. 17:16

기존 이동 연산의 경우 행렬의 덧셈으로 구현했다.

일반적인 행렬로는 이동에 대응하는 선형 변환을 구현할 수 없기 떄문이다.

 

해당 포스팅에서는 행렬 곱으로 이동 연산을 구현하는 방법에 대해서 알아본다.

행렬 곱으로 이동 연산을 구현하기 위해서는 특별한 방법이 필요하다.

 

그것은 바로 아핀 공간을 사용하는 것이다.

아핀 공간을 이용하면 모든 변환에 대해 선형 변환,행렬곱을 지원할 수 있다.

 

우리는 아핀 공간으로부터 가상 세계의 기반을 완성시킬 것이다.

1. 이동 변환을 위한 아핀 공간

2x2 정방 행렬의 곱셈으로는 2차원 평면에서의 이동을 구현할 수 없다.

임의의 벡터 (x, y)를 (a, b) 만큼 이동시키는 것은

(x+a, y+b) 와 같은 행렬 덧셈으로 구현할 수 있기 때문이다.

 

다음과 같은 정방행렬 A는 존재하지 않는다.

 

행렬 곱으로 인해 선형 변환을 수행하면, 연산 후에도 선형성이 만족되어야 한다.

즉, 변환 후에도 원점이 유지되어야 한다.

그러나 평행이동은 점을 일정한 벡터만큼 이동시키는 변환이기 때문에 원점을 유지하지 못한다.

 

선형성을 잃어버리게 된다.

 

그러나 공간의 차원을 하나 더 늘린다면 이동변환을 행렬 곱으로 나타낼 수 있다.

물체를 표현하는데 2개의 차원을 사용하고,

하나의 차원은 원점과의 연관성으로 활용하는 것이다.

 

 

전단 변환을 잠시 살펴보자.

전단은 표준기저벡터 하나를 고정시킨 상태에서 옆으로 밀어 공간을 기울이는 특징을 지닌다.

 

 

왼쪽부터 각각의 전단 행렬은 아래와 같다.

 

여기서 y값이 1인 부분의 선분을 잘 관찰해보자.

해당 선분은 전단 행렬에 의해 양의 x축 방향으로 이동하는 것처럼 보인다.

 

이는 선형성을 유지하면서 1차원적으로 선분을 이동시키는 것이 가능하다는 것을 보여준다.

y =1 로 고정한 상태에서 a만큼 미는 전단 변환의 결과는 1차원의 이동 변환 x + a 로 활용할 수 있다.

 

이를 2차원 평면 공간에도 적용해보자.

2차원의 평면 공간에서 이동 변환을 행렬곱으로 수행하기 위해서 좌표계를 3차원 공간으로 확장한 후, 마지막 차원 z의 값을 1로 고정한다.

 

그 다음, 3차원 전단 행렬을 설계해보겠다.

 

위 전단 행렬의 결과를 시각적으로 표현한 것

 

위 전단행렬의 결과는 z = 1인 2차원 평면에 대해서 마치 이동하는 듯한 효과를 만들어낸다.

이를 이동 변환행렬이라고 한다.

 

 

이동 변환행렬에서 주의할 점은 이동에 사용되는 벡터는 언제나 마지막 차원 값이 1이어야 한다는 것이다.

만약 2차원 상의 벡터 (x, y)를 이동 변환을 사용해 이동시키고자 하는 경우에는 값을 (x, y, 1)로 지정해야 한다.

이와 같이 이동이 가능한 벡터는 모두 마지막 차원 값이 1이 된다는 공통점을 가지며, 위 그림에서 주황색으로 채워진 영역을 형성하게 될 것이다.

 

이렇게 벡터 공간에서 이동을 위해 마지막 차원 값을 1로 한정한 부분 공간을 아핀 공간이라고 부른다.

 

앞선 포스팅에서 2차원 선형 변환 행렬은 2x2의 정방 행렬로 구현하였다.

그러나 2차원 상에서 이동 변환 행렬은 3x3 정방 행렬을 사용해야만 한다.

 

변환 행렬끼리의 행렬곱을 수행하기 위해서는 모든 변환 행렬의 크기가 같아야 한다. 따라서 이동 변환에 맞춰 3차원으로 늘린 변환행렬은 다음과 같다.

 

이렇게 한 차원을 높여 설계한 선형 변환을 아핀 변환이라고 하며, 위에 나열한 크기 변환 S, 회전 변환 R, 이동 변환 T는 앞으로 가상 공간의 변환을 다루는 데 있어 핵심적으로 사용될 아핀 변환이다.

 

임의의 벡터 (x, y, 1) 을 아핀 변환행렬에 곱한 결과는 다음과 같으며, 이들의 겨과 역시 마지막 차원 값이 1이 되어 해당 연산은 아핀 공간에 닫혀 있음을 확인할 수 있다.


2. 아핀 공간의 구성 요소

1) 점

아핀 공간에서 마지막 차원 값이 1인 특수한 벡터를 이라고 부른다.

점이 지니는 성질은 행렬 곱을 사용해 이동이 가능하다는 것이다.

가상 공간이 이동하려면 물체는 점으로 구성되어야 한다.

 

2차원 공간에서 점은 항상 (x, y, 1) 형태여야 한다.

만약, 마지막 값이 1이 아니고 다른 값이라면, 이동 변환을 적용한 결과가 예상한 값과 다를 수 있다.

 

이러한 점이 가지는 규칙은 3차원 공간에도 동일하게 적용된다.

한 차원 더 늘린 4차원 공간을 만들고 마지막 차원의 값을 1로 지정하면 3차원 공간에서 이동 변환을 구현할 수 았다.

 

다음은 2차원 아핀 공간의 점과 3차원 아핀 공간의 점을 표현한 것이다.

 

2) 이동 벡터

행렬 곱의 장점을 살리기 위해 의도적으로 아핀 공간을 사용한다.

그런데 벡터의 합 연산을 생각해보자.

 

z = 1인 아핀 공간상의 3차원 벡터 v1,v2가 있을 때, 이들의 합은 z = 1을 유지하지 못한다.

즉, 벡터의 합 연산은 아핀 공간에서 닫혀있지 않다. 그래서 기존의 벡터는 사용하지 못하고, 아핀 공간은 새로운 벡터의 개념을 사용한다.

 

아핀 공간에서 말하는 벡터는 벡터 공간의 원소로 정의한 벡터와 같은 단어이다.

그러나 혼동을 막기위해 이동 벡터 도는 변위 벡터라고 표현하기도 한다.

 

벡터는 아핀 공간 내의 이동을 지정하기 위해 사용되며, 아핀 공간의 점과 점 간의 최단거리로 정의된다.

 

 

아핀 공간위의 점 P1에 이동 벡터 v를 더한 결과는 아핀 공간의 다른 점 P2에 대응된다.

이를 수식으로 나타내면 다음과 같다.

이 수식에서 v에 대해서 정리하면 이동 벡터를 얻어낼 수 있다.

그렇다면 이동 벡터를 벡터 좌표로 표현하면 어떤 꼴을 보일까?

P1(x1, y1, 1), P2(x2, y2, 1) 이라고 하면 이동 벡터 v는 다음과 같다.

 

보다시피 이동 벡터의 마지막 차원 값은 항상 0이 됨을 알 수 있다.

따라서 2차원 아핀 공간의 이동 벡터들은 z = 0인 영역을 형성하게 된다.

이를 그림으로 나타내면 다음과같다.

 

3) 아핀 공간의 성질

아핀 공간의 중심을 원점 O라 한다면 원점 O의 값은 (0, 0, 1) 이 된다.

아핀 공간에 속한 임의의 점 P의 값을 (x, y, 1)로 지정한다면 원점 O에서 점 P로 향하는 이동벡터 v는 다음과 같이 구할 수 있다.

 

점과 벡터의 덧셈 연산은 아핀 공간에서 닫혀있다.

 

따라서 점을 물체, 벡터를 눈에 보이지 않는 힘으로 생각해보자.

그러면 아래와 같이 서로 다른 위치에 있는 점들에 이동 벡터 (a, b, 1)을 더하면 마치 물체에 보이지 않는 힘을 가해 동일한 크기와 방향으로 이동시키는 듯한 결과를 만들어낼 수 있다.

 

 

현실 세계 역시 보이는 물체와 보이지 않는 힘으로 구성되어 있으므로, 아핀 공간의 점과 이동 벡터를 사용한다면 혈ㄴ실 세계를 복제한 가상 공간을 구축할 수 있게 된다.

 

물리적인 관점에서 바로본 현실 세계의 3차원 공간을 유클리드 공간

유클리드 공간에서 작용하는 힘을 유클리드 벡터라고 하는데,

이에 대응되는 개념이 각각 아핀 공간과 이동 벡터인 것이다.

 

가상 공간을 설계할 때는 아핀 공간을 기반으로 제작하고 점과 이동 벡터를 구분해 설계하는 것이 효과적이다.

 

이때까지의 내용을 정리하면 다음과 같다.

  • 점: 물체를 표현하고 위치를 지정하는 데 사용, 마지막 차원의 값은 항상 1
  • 이동 벡터: 물체를 움직이는 데 사용, 마지막 차원의 값은 항상 0

점과 벡터의 마지막 차원 값을 토대로 두 요소 사이에는 다음과 같은 연산 규칙이 성립된다.

  • 점 - 점 = 벡터
  • 점 + 벡터 = 점
  • 벡터 + 벡터 = 벡터

점과 점 사이의 덧셈 연산은 닫혀 있음에 주의한다.


3. 아핀 결합

아핀 공간에서 점과 점 사이의 덧셈은 정의되지 않는다.

그러나 점과 점을 더할 때, 점에 스칼라 계수를 곱해서 더한다면 특정 조건에서 새로운 점을 생성할 수 있다.

 

어떤 두 점 P1(x1, y1, 1) 과 P2(x2, y2, 1) 이 존재할 때, 각각 스칼라 a, b에 대해 스칼라 곱셈을 수행한 뒤 더하면 그 결과는 다음과 같다.

 

새롭데 만든 벡터를 P3라고 할 때, 벡터가 아핀 공간 위에서 정의되기 위해서는 a+b = 1 이어야만 한다.

즉, x, y 값과 무관하게 a + b = 1 의 조건을 유지한다면 점과 점을 결합해 새로운 점을 만들 수 있다.

 

동일한 원리로 세 점에 대해서도 특정 조건에 대해서 다음과 같은 수식이 만족한다.

이렇게 여러 개의 점을 결합해 새로운 점을 생성하는 수식을 아핀 결합이라고 한다.

 

1) 두 점의 결합

아핀 결합을 통해 성성한 점들 사이에는 특정한 관계가 형성된다.

두 점이 아핀 결합이 성립하려면 점에 곱한 두 스칼라의 합이 a + b = 1 이 되어야 한다.

이를 바탕으로 b = 1 - a 로 나타내면, 계수 a에 대한 식으로 정리할 수 있고 이쓴ㄴ 언제나 점의 생성을 보장한다.

 

그렇다면 스칼라 a값의 변화에 따라 점들이 어떻게 생성되는지 관찰해보자.

a값이 0~1 사이라면 점 P3는 점P1,P2의 사이에 생성될 것이다.

a값이 >1 이라면 P3는 점P1의 너머에, a값이 <0이라면 P2의 너머에 생성될 것이다.

 

그렇게 아핀 결합을 통해 생성된 점을 모드면 P1, P2를 지나는 직선이 생성된다.

이 식을 a에 대해서 묶으면 다음과 같다.

좌변의 벡터는 P2에서 P1으로 향하는 이동 벡터, 우변의 벡터는 P2에서 P3로 향하는 이동 벡터이다.

즉, 이를 간단히 나타내면 아래와 같다.

이런 수식이 만족하면 벡터 u, v는 서로 평행한 벡터임을 알 수 있다. 즉, 두 점의 아핀 결합으로 생성되는 점은 P2에서 P1을 지나는 직선 상에 위치함을 보장받게 된다.

최종적으로 얻어낸 방정식은 위와 같고, 이런 식을 직선의 방정식이라고 한다.

 

여기서 만약

a의 정의역이 실수 전체 집합일 경우엔 직선

a의 정의역이 >=0 이면 P2->P1 로의 반직선

a의 정의역이 <=0 이면 P1->P2 로의 반직선

a의 정의역이 0<=a<=1 이면 점 P1, P2 사이의 선분이 된다.

 

반직선의 경우 컴퓨터 그래픽스에서 각광받는 레이트레이싱 기술에 그 개념이 사용된다.


4. 선 그리기 알고리즘

1) 벡터를 모니터의 점으로 표현

모니터 화면의 좌표계는 y축이 아래를 향하는 방식을 사용한다.

이를 스크린 좌표계라고 한다.

슼린 좌표계는 y축의 방향 외에도 데카르트 좌표계와 다른 성질을 가진다.

스크린 좌표계의 특징은 실수가 아닌 정수를 사용한다는 것이다. 

즉, 이산적인 정수를 사용한다.

 

스크린 좌표계를 사용해 화면에 무언가를 표현하기 위해서는 반드시 색상이 함께 지정되어야 한다. 이렇게 스크린 좌표와 색상이 대응하는 화면의 구성 요소를 픽셀이라고 한다.

 

따라서 벡터를 화면의 점으로 최종 표현하기 위해서는 실수로 표현된 벡터 좌표를 정수로 변환한 후 색상을 부여하는 과정을 거쳐야 한다. 

 

이러한 변환 과정을 픽셀화, 레스터라이징이라고 한다.

 

픽셀화에서 한 가지 재미있는 사항중 하나는 원점 픽셀을 정하는 것이다.

(0, 0) 의 좌표의 경우 어디에 픽셀을 찍어야 하는가?

어쩔 수 없이 중앙을 공유하는 4 픽셀 중 하나를 선택해야만 한다.

정답은 없으며 일관성 있는 규칙을 정하면 된다.

 

반대로 스크린 좌표를 벡터로 변환해야 하는 경우도 규칙을 정해야 한다.

 

1) 선 그리기 알고리즘

이후에 추가 예정

 

6. 연습 문제

1) 이동 변환을 행렬곱으로 나타낼 수 없는 이유를 정리하여 말하라.

 

2) 2차원 좌표 (2, 3)이 존재한다고 할 때, 이 좌표를 선형성을 유지하면서 (10, 20) 만큼 평행 이동시킬 수 있는 변환 행렬을 설계하고, 결과 좌표를 보여라

 

3) 2차원에서 이동 변환 행렬은 3x3 정방행렬을 사용한다. 그래서 기존 2x2의 회전, 크기변환 행렬 역시 3x3으로 확장해줘야 하는데, 그 이유가 무엇인가?

 

4) 아핀 공간 (x, y, 1) 에서 세타만큼 회전 아핀 변환을 수행했을 때, 결과 벡터를 쓰시오. 

 

5) 아핀 공간에서 기존 벡터를 사용하지 못하고 변위 벡터를 새롭게 정의하여 사용하는 이유는?

 

6) 아핀 공간의 의의에 대해서 자유롭게 설명하시오.

7) 아핀 공간에서 점과 점 사이의 덧셈은 정의되지 않는다. 그 이유를 쓰고, 해결 방안을 말하고 최종 수식을 적어라.

8) 아핀 공간 위의 점 P2에서 점 P1 방향의 반직선을 정의하고 싶을 때, 반직선의 방정식을 구하여라.

 

9) 정수만을 사용해서 빠르게 선을 그려내는 알고리즘과 영역을 9개로 나누어 4개의 비트를 이용해 화면 영역 밖으로 나가는 직선을 처리하는 알고리즘은 각각 무엇인가?

 

10) 아핀 공간에서 점과 벡터 사이에 정의된 기본적인 연산은 무엇인가?