[Graphics Study] 변환 - 2D
1. 변환의 종류
- Scaling(축소, 확대)
2D에서는 축소확대인자(Sx,Sy)사용
예를들어 (x,y)를 축소/확대 할 때 x방향 인자, y방향 인자를 각각 곱해주면 됨. => (Sx*X, Sy*Y)
* 다만 그래픽스에서는 행렬의 곱셈으로 나타내므로
(Sx 0 ) (x) = (Sx X)
(0 Sy) (y) (Sy Y)
- Rotation(회전)
(x') =(cosθ - sinθ) (x)
(y') (sinθ - cosθ) (y)
로 나타낼 수 있다. 여기서 θ: 회전하고 싶은 각도
*이건 반시계방향의 회전 기준이다. 시계방향으로 회전하려면 -θ를 대입한다.
- Translation(이동)
(x) + (dx) = (x + dx)
(y) (dy) (y+dy)
Translation의 경우 Scailing이나 Rotation과 달리 벡터 '덧셈'으로 이루어진다.
만약 Translation도 행렬곱으로 나타내고 싶다면, homogeneous coordinates(동차 좌표)를 사용하면 된다.
이를 사용하면 3*3행렬이 도출되므로 Scaling과 Rotation에도 1을 추가해서(Sx,Sy,1) 계산하여 3*3행렬을 만들면 된다.
그러면 회동과 이동을 둘 다 처리하는 등 일들이 가능해진다.
단 그 순서는 여전히 중요하다.
행렬곱에서 AB != BA이듯이 변환도 일종의 행렬곱으로서 교환법칙이 성립하지 않는다.
* 원점이 아닌 임의의 점을 변환하고 싶다면
그 점을 원점으로 Translate 한 후 변환, 원래위치로 Translate
안 그러면 다른 결과가 나옴
2. Affine transform
Affine transform은 아래와 같이 분류된다.
- Linear transform
- Scaling
- Rotation
- 그 외 여러가지
- Translation
이처럼 Scaling, Rotation과 Translation은 다른 범주에 있다.
이들을 함께 적용(확대와 이동, 회전과 이동 등..)할 때 행렬곱 연산에도 영향을 준다.
-> 몇개의 Affine transform이 주어지더라도, [L|t] 결과가 도출된다.
[L|t]는 L(Linear transform combination)먼저 적용 후 t(combined translation)를 더하는 것. (Lp + t)
여기서 t(combined translation)은 x방향으로 얼마, y방향으로 얼마 이동하라는 translation들을 의미한다.
3. Rigid Motion
[L|t]에는 선형 변환들인 Scaling, Rotation이 포함되었으며 Translation도 포함되어 있다.
그러나 Scaling을 하지 않는 경우도 있다. 이 경우 물체의 모양은 변하지 않고, 오직 위치와 각도만 변한다.
이를 Rigid-body Motion 혹은 Rigid Motion이라고 한다.
다른 선형 변환 없이 Rotation만 포함하므로 [R|t]로 표현한다.
역시나 Rotaion먼저 적용 후 translation을 더한다. (Rp + t)