본문 바로가기

예전/3D

어파인 공간


벡터 정의에서 유의할 점은 벡터의 위치이다. 




(믿기지 않겠지만, 벡터다.)


벡터(Vector)는 크기와 방향을 지닌 것. 이라는 정의를 갖기 때문에 위의 벡터들은 모두 완전히 동일한 벡터다. 

하지만, 누가 봐도 다른 위치에 있다. 


벡터의 성질만으로는 공간상의 위치를 중시하는 기하학에서 벡터만으로는 부족했다. 

그래서 추가한 것이 바로 점(Point)다. 점은 위치가 있는 것. 크기나 방향은 없다. 


이 개념을 벡터 공간에 추가한다면 방향뿐만 아니라 위치도 표시할 수 있게 된다. 

이렇게 되기 위해서는 벡터와 벡터, 점과 점, 점과 벡터사이의 연산이 허용되어야 한다.




위 그림에서 점 Q에서 점 P를 빼면 P에서 Q를 향하는 벡터 V가 된다. 

즉, V = Q - P 이다. 이것은 Q = V + P 로 표현될 수 있고, 이것의 우변은 점 P와 벡터 V의 합이 된다.


어파인 공간이란, 이처럼 점을 마치 벡터처럼 취급함으로써 벡터 공간을 확장한 것이다.


어파인 공간에서는 3가지 연산이 가능하다.


1. 벡터와 벡터의 덧셈(뺄셈)

2. 스칼라와 벡터의 곱셈(나눗셈)

3. 점과 벡터의 덧셈(뺄셈)



1, 2는 기본의 벡터 공간에서도 가능했던 연산이고, 3번이 추가된 것이다. 

즉, 어파인 공간에서는 점과 벡터를 덧셈(뺄셈)함으로써 우리가 표현하고자 하는 어떤 점의 위치를 표시할 수 있다. 

이렇게 어파인 공간에서는 선분이 표시된다.





위 그림에서 선분 PQ는 점 P와 점 Q를 잇는 수많은 점들로 이루어져 있다. 

어파인 공간에서 점 P는 원점 O 에서 점 P로가는 벡터 P로 취급할 수 있다. 점 Q와 선분 PQ 위의 점 V도 각각 벡터 Q, 벡터 V로 표시할 수 있다. 


만약 점 V가 선분의 중심점이라면 점 P에서 점 V로 가는 벡터는 점 P에서 점 Q로 가는 벡터와 방향은 같고, 길이만 반이다. 따라서 벡터 PV는 (Q-P)/2로 표시할 수 있다. 


그런데, 벡터의 덧셈 규칙에 의해 이 벡터는 V와 P의 차벡터인 V-P로 표현할 수 있다. 


즉, V-P = (Q-P)/2 이며,

V = P + (Q-P)/2 로 표현할 수 있다.


점 V가 선분의 중심점이 아니고, 일반 t라고 한다면


V = P + t*(Q-P)                                   - (1)

V = P + tQ - tP                                    - (2)

V = (1-t)P + (t)Q                                 - (3)


가 된다.


if t=0 이라면, V=P가 되고, else if t=1 이라면, V=Q가 된다. 

이 식으로 t가 0에서 1까지 가는 동안 선분PQ의 모든 점이 표시된다. 


(1) 번식의 우변에서 (Q-P)는 벡터다. 즉 어파인 공간에서는 점에서 점을 빼면 벡터가 된다. 따라서 (1) 식의 우변은 점과 벡터의 합이고, 좌변은 점인 형태이다.

즉, 점과 벡터를 더하면 점이 된다. 


(3) 번식에서 V, P, Q는 모두 점이다. 따라서 점과 점을 더하여 새로운 점을 계산하는 것이다. 

어파인 공간에서 점과 점을 더하는 연산은 무의미하므로 일반적으로 허용되지 않는다. 

어파인 공간에서 점의 덧셈은 각 점들의 앞 계수의 합이 1일 때에 한해서만 허용되고, 의미를 갖는다. 

t와 1-t 의 합은 1이므로 가능하다. 점이 몇 개가 되든지 간에 각 점의 앞의 계수의 합이 1이 되는 경우를 어파인 합(Affine Sum)이라고 부른다.





OpenGL로 배우는 컴퓨터 그래픽스 책을 보고 정리한 내용입니다.

문제시 댓글 남겨주세요.

'예전 > 3D' 카테고리의 다른 글

동차 좌표ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ  (0) 2014.12.09
모델변환과 시점변환  (0) 2014.12.09
동차좌표  (0) 2014.12.05
D3D11 wireframe  (0) 2014.05.23
Direct3D의 그리기 2. 정점 버퍼  (0) 2014.04.06