일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 아두이노
- Visual Micro
- WinAPI
- map
- queue
- 시스템프로그래밍
- arduino compiler
- Arduino
- Array
- 아두이노 컴파일러
- Algorithm
- c++
- priority_queue
- C언어
- set
- 컴퓨터 그래픽스
- list
- 통계학
- 운영체제
- Deque
- 아두이노 소스
- directx
- LineTracer
- stl
- html
- Stack
- 자료구조
- 라인트레이서
- 수광 소자
- vector
- Today
- Total
Kim's Programming
2차원 그래픽스의 동차좌표계 변환 본문
동차좌표계 변환
동차좌표계를 써야 하는 이유
앞에서 봤던 변환에서 이동은 더하기 연산이며 신축변환과 회전 변환은 곱셈을 하는 변환입니다. 하지만 곱셈과 덧셈이 많아지기 때문에 계산량이 크게 증가하게 됩니다. 하지만 단순하게 곱하기만 연속해서 하게 된다면 계산이 간단해 지게 됩니다. 그렇게 하기 위하여 동차좌표계를 쓰게 됩니다.
동차좌표계의 표현
2차원의 평면에서 한 점 P(x,y)를 동차좌표계로 표현하면 차원이 하나 증가되어 임의의 h!=0에 대하여 P(hx,hy,h)의 형태로 표현하게됩니다. 만약 동차 좌표계에서 h=1인 경우에는 점 P(x,y,1)이 그대로 2차원 좌표 P(x,y)로 대응되므로 별도의 나눗셈이나 곱셈을 할 필요가 없습니다. 따라서 일반적으로 계산의 편의를 위하여 평면상의 점 P(x,y)를 동차좌표계에서 h=1인 P(x,y,1)인 형태로 표현하며, 이에 변환행렬의 크기는 3x3이 됩니다. 따라서 앞에서 봤던 이동변환, 신축변환, 회전변환은 다음과 같이 3x3형태 및 곱셈 계산방식으로 표현합니다.
동차계로 표현된 3*3의 행렬변환식을 연속해서 붙이게 되면 여러 변환들을 차례로 수행한 후의 좌표를 구할 수 있습니다. (행렬 곱셈식으로) 또한 동차좌표계식은 행렬로 이루어져있기 떄문에 행렬의 원칙을 다 따라갑니다. 결합법칙은 성립하나 교환법칙은 성립하지 않습니다.
반사 그리고 밀림 변환
반사(Reflection)
객체를 거울에 비추게 되면 원래 모습과 대칭이 되는 모습이 나타나는데, 이와 같은 결과를 구하는 변환이 반사변환입니다. 반사변환은 x축, y축, 원점에 대해서 대칭을 할 수 있습니다. x축에 대한 반사변환은 y값의 부호를 바꾸고, y축에 대한 반사변환은 x값의 부호를 바꾸고, 원점에 대한 대칭은 x,y의 부호를 모두 바꿔주면 되며 180도 회전 변환 한 결과와 같아 집니다.
x축, y축, 원점 대칭에 대한 식들은 다음과 같습니다.
반사 또한 축과 원점에 대해서만 되기 떄문에 이 3개 이외의 경우에 대해서 반사를 해야하면 축 쪽으로 옮겨줘야 합니다. 예를들어 어떤 점을 y=x에 대해서 반사를 한다고 했을 때 회전 변환을 통해서 45도 만큼 회전을 시켜서 y=x를 y축에 맞춰 준 다음 y축에 대해서 반사 변환을 시켜 주게 됩니다. 예를 들어서 (x,y)를 y=x에 대해서 대칭할때 다음의 과정을 이용합니다.
- 기존의 객체를 45도 회전해서 y축과 y=x를 맞춘다
- y축에 대한 반사 변환을 한다.
- 다시 -45도 회전시켜 원래대로 돌린다.
밀림(Shearing)
2차원 평면 상에서 객체의 한 부분을 고정시키고 다른 부분을 밀면 객체의 모양이 가울어지거나 뒤틀어 지는데 이러한 변환을 밀림변환이라고 합니다.
객체의 한 부분을 고정시키고 일정방향으로 미는 경우 고정된 지점에서 멀수록 밀리는 거리가 커지게 됩니다. 밀림 변환은 x축 방향으로 y축 방향으로 밀림을 할 수 있는데 다음 식들을 따르게 됩니다.
'Computer Theory > Computer Graphics' 카테고리의 다른 글
3차원 그래픽스 (0) | 2016.01.24 |
---|---|
래스터 변환과 2차원 윈도우 (0) | 2016.01.24 |
2차원 그래픽스의 변환 (0) | 2016.01.23 |
2차원 그래픽스 문자와 색상 표현 (0) | 2016.01.23 |
2차원 그래픽스 다각형 영역과 채우기 (0) | 2016.01.23 |