1 분 소요

변환

좌표나 벡터를 다른 좌표나 벡터로 바꾸는 것

보통 위치, 방향, 크기 등을 바꾸는 연산을 총칭하며
대개 행렬을 통해 표현

회전, 이동, 반사 등등의 변환 뿐 아니라
선형 변환, 아핀 변환 등 매우 많고 다양한 변환이 존재

회전 변환

Image

x,y 좌표에 대하여
Theta 각도 만큼 회전시킨다는 것을
특정한 ‘행렬’로 표현

분석

  • 기본적으로 ‘길이’는 보존됨

  • 원점을 기준으로 반지름 1인 원을 그리고
    그 원 위의 좌표는
    정점에서 가리키는 각도 Theta에 의하여
    (cos(theta),sin(theta))
    (반지름이 1이므로 삼각함수를 이용해 x,y좌표를 구할 수 있음)
    이를 각각 x,y로 표현

  • 이 때, 새로운 각도 Theta2를 통해
    점을 회전시키게 되면
    새로운 각도인
    cos(theta + theta2), sin(theta + theta2)
    이를 각각 x’,y’로 표현

  • 이것을 삼각함수의 덧셈 정리를 통해 분리하게 되면
    cos(theta + theta2) = cos(theta) * cos(theta2) - sin(theta) * sin(theta2)
    sin(theta + theta2) = sin(theta) * cos(theta2) + cos(theta) * sin(theta2)
    가 된다

  • 따라서 새로운 좌표는
    x’ = x * cos(theta2) - y * sin(Theta2)
    y’ = x * cos(theta2) + y * sin(theta2)
    가 되며
    이를 행렬 형태로 바꾸어 표현하면 위의 변환식이 된다

전치 행렬을 통해 row Vector로 바꾼 경우

Image

양 측면에 Transpose를 사용하여
위처럼 변형할 수 있다
(순서가 바뀜에 주의)

(사용하는 API가 row , Column에 따라
자유롭게 바꾸어 구현할 수 있음을 기억해두자)

이동 변환

Image

2x2 행렬로는 이동을 표현할 수 없기에
‘동촤 좌표’를 사용하여 3x3 행렬로 확장하여 진행한다

이동 수치값 bx,by 를
행렬에 넣어 연산하기 위해 확장

동차 좌표(Homogeneous Coordinates)

Image

좌표의 차원을 하나 늘려서 표현하는 방식

상응하는 좌표를 확장한 좌표의 값으로 나누어 계산
ex : 동차좌표 : (x,y,w) -> 실제 좌표 : (x/w,y/w)

그래픽스에선 w에 1을 사용하여 단순하게 변환이 가능하다

  • w에 1을 넣는 의미?
    1을 넣어 ‘위치’(포인트) 임을 표현한다
    반대로 0인 경우는 ‘방향’(벡터)로 표현
    => 포인트는 ‘이동 변환’을 받을 수 있지만
    벡터는 ‘이동 변환’을 받을 수 없도록
    (해당 위치에 0을 넣으면 x’ = x, y’ = y가 되므로)

Image

이동을 표현하기 위하여 사용하는 것 또한 존재하나
다른 변환인 ‘회전’,’스케일’ 등을 같이 묶어 처리할 수 있기에
연산의 효율을 올릴 수 있음

댓글남기기