일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시스템프로그래밍
- set
- vector
- 라인트레이서
- list
- Array
- queue
- Deque
- priority_queue
- WinAPI
- Algorithm
- 통계학
- 운영체제
- stl
- c++
- map
- 아두이노
- html
- Arduino
- C언어
- 자료구조
- 아두이노 소스
- LineTracer
- 컴퓨터 그래픽스
- Visual Micro
- Stack
- arduino compiler
- 아두이노 컴파일러
- directx
- 수광 소자
- Today
- Total
Kim's Programming
2차원 그래픽스 기본요소와 그리기(2/2) 본문
원, 타원, 기타곡선 그리기
원그리기
원은 출력장치에서 그리는 대표적인 방법에는 극 좌표계를 이용하여 일정 간격의 선조각을 연결하여 그리는 방법과 직교 좌표계에서 정수 계산만으로 출력할 픽셀들을 구하는 Bresenham 원 그리기 알고리즘이 있습니다.
1) 극좌표계(Polar Coordinate)를 이용하는 방법
원의 공식이 일때 직교 좌표계에서 (x,y)를 함수 형태로 표현하면 다음과 같이 됩니다.
여기에 (x,y)를 극 좌표계를 이용 매개변수 를 이용한 함수로 표현하면 다음과 같이 됩니다.
만약 중심좌표가 (xc,yc)로 주워 졌을 때면 극좌표는
가 되게 됩니다.
이 때 매개변수 의 구간을 일정 간격으로 나누어 원주 상의 점을 구한 후 이 점들을 선분으로 연결합니다.
의 간격을 작게 할수록 부드러운 원을 그릴 수 있고 원의 크기나 해상도를 고려하여 적절하게 간격을 나누면 됩니다. 한편
의 모든 각도에 대하여 원주상의 픽셀 점을 구할 필요는 없습니다. 원을 8등분 한다음 45~90도 사이의 경우만 구한다음 대칭을 이용하여 간단히 나머지를 구할 수 있습니다.
2) Bresenham 원 그리기 알고리즘
어떤 의 오차를
라고 하면
로 놓을 수 있습니다. 이때
의 다음점
는
이거나
입니다. 이들의 오차를 각각
과
라고 놓으면
와 같이 됩니다.
이때 이므로
이다 (90도와 45도 사이에서)
Ⅰ)e1과 e2가 모두 양수라면 e1>e2이므로 을 다음 점으로 선택
Ⅱ ) e1과 e2가 모두 음수하면 를 다음 점으로 선택
Ⅲ ) e1이 양수 e2가 음수인 경우
이면
을 선택
이면
을 선택
이면 어느 선택도 OK
e1>0, e2<0 이므로 가 됩니다.
따라서
는
인 경우 선택하며
는
인 경우 선택합니다.
로 계산했을 때
※ 를 선택한 경우
※ 를 선택한 경우
따라서 k=0일때
되게 됩니다.
따라서 Bresenham 원 그리기 알고리즘은 다음과 같이 간단하게 나타낼 수 있습니다.
(중심이 이고, 반지름이 r 인 경우)
1) 초기화를 합니다.
으로 계산합니다.
2) 인 동안 다음 계산을 반복합니다.
k번 째 점에서
인 경우 다음 점은
이며
으로 계산하고
인 경우 다음 점은
이며
으로 계산하고
타원그리기
중심이 이고 각 반지름이
일 때 타원의 공식은 다음과 같습니다.
극 좌표계를 이용하여 (x,y)를 표현하면 다음과 같이 됩니다.
입니다.
타원은 원처럼 8방향이 아니라 타원은 4방향으로 대칭되기 떄문에 1사분면인 0도와 90도 사이에서의 점들을 구한뒤에 나머지는 대칭으로 처리합니다.
기타 곡선 그리기
함수로 표현 가능한 곡선의 경우에는 y=f(x)에서 x값을 변화시킬 때 y 값을 구하는 방식으로 곡선을 그릴 수 있습니다. 삼각(Sine)함수, 자수(Exponential) 함수, 다항식(Polynomial) 함수, 스플라인(Spline) 함수 등이 y = f(x)의 형태로 표현되는 곡선입니다.
'Computer Theory > Computer Graphics' 카테고리의 다른 글
2차원 그래픽스의 변환 (0) | 2016.01.23 |
---|---|
2차원 그래픽스 문자와 색상 표현 (0) | 2016.01.23 |
2차원 그래픽스 다각형 영역과 채우기 (0) | 2016.01.23 |
2차원 그래픽스 기본요소와 그리기(1/2) (0) | 2016.01.22 |
2차원 그래픽스와 3차원 그래픽스 (2) | 2016.01.22 |