4장 기하학적 객체와 변환 - 표현 학습목표 차원과 기저 등의 개념을 이해한다 벡터공간의 표현을 위한 좌표계와 아핀 공간의 표현을 위한 프레임을 이해한다 좌표의 변경과 프레임 변경을 이해한다 동차 좌표계를 이해한다
선형 독립성 (linear independence) 벡터 v1, v2, …, vn 의 집합은 다음 조건을 만족할 때 선형독립적이라고 한다 a1v1+a2v2+.. anvn=0 iff a1=a2=…=0 벡터들의 집합이 선형 독립적이면 하나의 벡터를 다른 벡터들을 이용해서 표현할 수 없다. 벡터들의 집합이 선형 종속적이면 적어도 하나의 벡터를 다른 벡터들을 이용해서 나타낼 수 있다.
차원 (dimension) 벡터 공간에서 선형 독립적인 벡터들의 개수의 최대값은 고정되어 있고, 그것을 그 공간의 차원이라고 한다 n-차원 공간에서, 임의의 n 개의 선형 독립적 벡터들의 집합은 그 공간의 기저(basis)를 구성한다. v1, v2,…., vn 의 기저가 주어질 때, 임의의 벡터 v는 다음과 같이 쓸 수 있다 v=a1v1+ a2v2 +….+anvn 여기서 {ai} 는 유일(unique)하다.
지금까지 좌표계와 같은 참조 시스템을 사용하지 않고 기하학적 개체에 대해서 작업할 수 있었다. 표현(representation) 지금까지 좌표계와 같은 참조 시스템을 사용하지 않고 기하학적 개체에 대해서 작업할 수 있었다. 점이나 개체 등을 실세계와 연관시키기 위해서는 참조 시스템이 필요하다 예를 들어, “점의 위치는 어디인가?”라는 질문은 참조 시스템이 없이는 대답될 수 없다 세계 좌표계 카메라 좌표계
좌표계(coordinate system) 기저 v1, v2,…., vn 가 있을 때 하나의 벡터는 다음과 같이 쓸 수 있다 v=a1v1+ a2v2 +….+anvn 스칼라의 리스트 {a1, a2, …. an}를 주어진 기저에 대한 v 의 표현이라고 한다. (ai : 성분) 표현을 스칼라의 열이나 행으로 쓸 수 있다 a = [a1 a2 …. an]T =
예 v=2v1+3v2-4v3 a=[2 3 –4]T 이 표현은 특정 기저에 대한 표현임을 주의 예를 들어, OpenGL 에서 벡터들을 세계 기저를 사용해서 표현하는 것으로 시작하지만 나중에는 시스템이 카메라 기저를 사용한 표현을 필요로 한다
좌표계 어느 것이 올바른가? 두 개 다 올바르다. 벡터에는 고정된 위치가 없기 때문이다 v v
프레임 좌표계는 점들을 표현하기에는 불충분하다 아핀공간에서 작업하면, 원점이라는 하나의 점을 기저벡터들에 추가함으로써 프레임(frame)을 구성한다 v2 v1 P0 v3
프레임에서의 표현 (P0, v1, v2, v3)에 의해서 정해지는 프레임 이 프레임에서, 모든 벡터는 다음과 같이 쓸 수 있다 v=a1v1+ a2v2 +….+anvn 모든 점은 다음과 같이 쓸 수 있다 P = P0 + b1v1+ b2v2 +….+bnvn
점과 벡터의 혼용 다음의 점과 벡터를 생각해 보자 P = P0 + b1v1+ b2v2 +….+bnvn v=a1v1+ a2v2 +….+anvn 이것들은 비슷한 표현을 갖는 것처럼 보인다 p=[b1 b2 b3] v=[a1 a2 a3] 이것은 점과 벡터의 혼동을 일으킨다 벡터는 위치를 갖지 않는다 v p v 점 : 고정 벡터 : 어디든 놓여질 수 있다
동일한 표현 0•P = 0 , 1•P =P 로 정의하면 다음과 같이 쓸 수 있다 v=a1v1+ a2v2 +a3v3 = [a1 a2 a3 0 ] [v1 v2 v3 P0] T P = P0 + b1v1+ b2v2 +b3v3= [b1 b2 b3 1 ] [v1 v2 v3 P0] T 따라서 4차원 동차좌표(homogeneous coordinate) 표현을 얻는다 v = [a1 a2 a3 0 ] T p = [b1 b2 b3 1 ] T
동차좌표 4차원 동차좌표의 일반적 형태는 p=[x y x w] T 다음 관계에 의해서 3차원 점 (for w0)으로 돌아온다 xx/w yy/w zz/w w=0이면 벡터의 표현이다 동차좌표는 3차원의 점을 4차원에서 원점을 통과하는 직선으로 치환한다
동차좌표는 모든 컴퓨터 그래픽스 시스템의 핵심이다 동차좌표와 컴퓨터 그래픽스 동차좌표는 모든 컴퓨터 그래픽스 시스템의 핵심이다 모든 표준 변환들(회전, 이동, 크기변환)은 4 x 4 행렬과의 행렬 곱으로 구현될 수 있다 하드웨어 파이프라인은 4차원 표현에 대해서 동작한다 직교관측에서, 벡터에 대해서는 w=0, 점에 대해서는 w=1 이다 투시관측에서는 투시제산(perspective division) 을 필요로 한다
좌표계의 변경 같은 벡터의 두 개의 다른 기저들에 대한 두 개의 표현을 생각해 보자 w=a1v1+ a2v2 +a3v3 = [a1 a2 a3] [v1 v2 v3] T =b1u1+ b2u2 +b3u3 = [b1 b2 b3] [u1 u2 u3] T a=[a1 a2 a3 ] b=[b1 b2 b3] 여기서
u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 좌표계의 변경 기저 벡터들인 u1,u2, u3 는 첫 번째 기저들을 이용해서 표현될 수 있는 벡터들이다 u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 w M =
좌표계의 변경
좌표계의 변경
프레임의 변경 동차 좌표계에서 점과 벡터의 표현에 대해서 비슷한 방식을 적용할 수 있다 두 개의 프레임을 생각해보자 점과 벡터가 각각의 프레임에서 표현될 수 있다 (P0, v1, v2, v3) (Q0, u1, u2, u3) u2 u1 v2 Q0 P0 v1 u3 v3
u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 프레임의 변경 기저의 변경에서 했던 것을 확장 u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 Q0 = g41v1+g42v2+g43v3 +P0 4 x 4 행렬을 정의 M =
프레임의 변경
표현에 대해서 작업 두 프레임에서 임의의 점이나 벡터는 같은 형식의 표현을 갖는다 a=[a1 a2 a3 a4 ] : 첫 번째 프레임에서 b=[b1 b2 b3 b4 ] : 두 번째 프레임에서 여기서 점이면 a4 = b4 = 1 이고, 벡터이면 a4 = b4 = 0 이다 행렬 M 은 4 x 4 이고 동차 좌표계에서 아핀 변환을 나타낸다 a=MTb
아핀 변환 모든 선형 변환은 프레임의 변경과 등가적이다 모든 아핀 변환은 직선을 보존한다 그러나, 아핀 변환은 행렬 중에 4 개의 원소가 고정되어있고 모든 가능한 4 x 4 선형변환의 부분집합이기 때문에 12 자유도 만을 갖는다.
세계 좌표계와 카메라 좌표계 표현에 대해서 작업할 때, n-튜플에 대해서 작업한다 프레임의 변경은 4 x 4 행렬로 정의된다 OpenGL에서, 우리가 시작하는 기본 프레임은 세계 프레임이다 결국에는 개체들을 카메라 프레임에서 표현하게 되는데, 세계 좌표계에서의 표현을 모델-관측 행렬을 이용해서 변경함으로써 가능하다 초기에는 두 프레임이 같다 (M=I)