본문 바로가기

ComputerGraphics [고려대학교_한정현]

4강(1)- 변환(transform) - scaling, rotation, translation

오늘 수업 : 3가지의 중요한 변환을 배운다

이 변환들은 무조건  3X3 행렬을 이용한 곱셈으로 표현할 수 있다. 

Affine Transform 
  ㄴ Linear Transform
       - Scaling 
       - Rotation
   ㄴ Translation

[Scaling]

  - 축소, 확대  (  x 방향 , y방향 scale )

 ex_1) 정점의 Scaling

  - 행렬의 곱셈으로 표현할 수 있다.

스케일링 벡터 *  대상 벡터 = 결과물

 ex_2) 다각형의 Scaling

  - 다각형의 모든 Vetor에 스케일링 벡터를 곱해주면 그 다각형은 scaling 된다.


[Rotation]

  - 회전 변환 

 ex_1) 정점의 Rotation

  - 회전각 Θ 만큼 반시계 방향으로 회전시키는 벡터는 아래와 같다.

원점을 기준으로 반시게 방향으로 회전시키는 벡터

  ex_2) 정점의 Rotation ( 시계방향

원점을 기준으로 시계방향으로 90도 회전


[Translation] 

  - 이동시킨다.  

  - Cartesian coordinates(카테시안좌표) 덧셈으로 표현이 된다.  -> 얘도 곱셈으로 표현 할 수 없나요? 

  ex_1) 덧셈으로 표현하기

점의 이동
카테시안좌표를 더해서 구하는 공식

    ex_2)  곱셈으로 표현하기

      - homogeneous coordinates (동차좌표) 를 통해서 곱셈으로 표현 가능하다.

    > 동차좌표를 구한다.

동차좌표 : Identity 벡터를 하나 만들고  우측상단 (네모칸) 에 dx,dy 를 입력하면 된다.

    > 위에서 만들어둔 x,y,1 과 동차좌표를 곱해준다.

결과에서 마지막 1만 뺴면 우리가 원하는 답

 tip ) 동차좌표에는 1만 넣어야 하나요? 아닙니다. 

       1대신 w를 집어넣고,  x,y에 모두 w를 곱해주면  동차좌표가 나온다.

        ex) (2,3)만큼 translate 시키는 동차좌표는 (2,3,1) (4,6,2) (6,9,3) 이 있다.

 


[Scaling, Rotation 또한 3x3으로 표현할수 있나?]

동차좌표 때문에 3x3으로 표현이 되었는데.

 Scaling, Roation 의 2x2 행렬들은 3X3으로 표현 못하나요

 ex ) Scaling ,Rotation 도 3x3으로 표현할 수 있다.

Scaling ,Rotation 도 3x3으로 표현할 수 있다.

 


[왜 모든 행위를  '3x3배열'의 '곱셈'으로 가능하게 했을까? ]

 도형의 변환을 곱셈의 연속으로 표현할 수 있다.

  ex_1) 90도 회전 -> (7,0) 이동 

마지막줄 설명 :기존좌표와 먼저 곱해져야 하기 때문에, 회전에 대한 matrix 가 뒤에 쓰여진다.

  ex_2) 교환법칙에 대한 고찰

     - 행렬의 곱셈은 교환법칙이 성립하지 않는다. 
       > Transform 또한 행렬들의 곱셈들로 이루어 져있기 때문에,  교환법칙이 성립하지 않는다. 

       > AB != BA

 

 


[임의의 점을 기준으로 Rotation]

 ex_1)  회전식의 결과물이 이상하다. 왜냐하면 origin(원점)에 대해 회전시키는 공식이었기 때문이다.

90도 회전인데, 결과물이 이상하다. 이것은 origin(원점)에 대해 회전시키는 공식이었기 때문이다.

  ex_2) 원점이 아닌 점에 대해 이동시키는 올바른 방법 

    - 먼저 점을 원점과 기준점의 차이만큼  Translation(이동)시키고

    - 회전시키고(Rotation)

    - 다시 이동시켰던 만큼 re-Translation(이동) 시킨다.

위 과정을 그림으로 표현함
위 그림을 식으로 나타냄 좌: 변환동차좌표, 우:동차좌표와 옮길점 곱계산