1. 교과목명
컴퓨터 그래픽스
페이지
1/5
작성자
이상호
확인자
이병래 교수
승인자
이병래 교수
작성일
2020-07-17
제목
2020학년도 1학기 출석수업대체시험 실습과제
파일명
[방송통신대 컴퓨터과학과] 컴퓨터
그래픽스_출석수업대체과제물_중간평가_20200516.hwp
- 1 -
2020학년도 1학기 출석수업대체시험 실습과제
❍ 교과목명 : 컴퓨터 그래픽스
❍ 학 번 : 201934-363698
❍ 성 명 : 이상호
❍ 연 락 처 : 010-4078-7412
l 과 제 명 :
· 기울기가 1보다 큰 선분을 그릴 수 있도록 교재 82쪽(멀티미디어 강의자료 3강 26번 슬라이드)의 알
고리즘을 수정하고, 선분 (2, 1) - (5, 8)을 그리는 과정을 구하라(멀티미디어 강의자료 3강 25번 슬라
이드 참고).
· 홀-짝 규칙을 이용하여 다각형의 내부와 외부를 판별하는 과정에 대하여 설명하라.
< 목 차 >
I. Bresenham 선분 알고리즘 ·························································································· 2
II. 다각형 내/외부 판별 ································································································· 4
III. 참고문헌 ····················································································································· 5
2. 제목
2020학년도 1학기 출석수업대체시험 실습과제
작성일
2020-07-17
페이지
2/5
- 2 -
I. Bresenham 선분 알고리즘
Ÿ Bresenham 알고리즘은 x-y 평면의 8분면 및 4분면의 대칭성을 통해 임의의 기울기를 갖는 선분들을
일반화될 수 있다.
Ÿ 즉 기울기가 1보다 큰 경우 해당 도서에 기술한 예시 (0 < 기울기 < 1)에서와 같이 y = x를 기준으
로 좌표 변환하면 된다 (소스 코드에서 보라색 표기).
Ÿ 그 결과 그림 1에서 각 x 좌표에 따른 y 좌표를 나타내었고 이를 해당 경우 (기울기 > 1: 주황색,
기울기 = 1: 회색, 0 < 기울기 < 1: 청색)에 대한 가시화하였다 (그림 2 참조).
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void fnBresenhamLine(int xl, int yl, int xr, int yr) {
int x = xl, y = yl, W = abs(xr - xl), H = abs(yr - yl);
int F = (2 * H) - W, dF1 = (2 * H), dF2 = 2 * (H - W);
printf("[INIT] xl : %d, yl : %d, xr : %d, yr : %d n", xl, yl, xr, yr);
printf("[INIT] x : %d, y : %d, W : %d, H : %d, F : %d, dF1 : %d, dF2 : %d n", x, y, W, H, F, dF1, dF2);
for (x = xl; x <= xr; x++) {
// 0 < m < 1의 경우
// printf("[OUT] x : %d, y : %d, F : %d n", x, y, F);
// m > 1의 경우
printf("[OUT] x :%d, y :%d, F :%d n", y, x, F);
if (F < 0 ) {
F += dF1;
} else {
y++;
F += dF2;
}
}
}
int main() {
printf("%s n", "[START] fnBresenhamLine");
fnBresenhamLine(2 , 1 , 5 , 8 );
printf("%s n", "[END] fnBresenhamLine");
return 0 ;
}
표 1. 조건 (기울기 > 1)에 대한 알고리즘 소스 코드.
3. 제목
2020학년도 1학기 출석수업대체시험 실습과제
작성일
2020-07-17
페이지
3/5
- 3 -
그림 1. 조건 (기울기 > 1)에 따른 선분 알고리즘 실행 결과.
그림 2. 조건 (기울기 > 1: 주황색, 기울기 = 1: 회색, 0 < 기울기 < 1: 청색)에 대한
선분 알고리즘 가시화.
4. 제목
2020학년도 1학기 출석수업대체시험 실습과제
작성일
2020-07-17
페이지
4/5
- 4 -
II. 다각형 내/외부 판별
Ÿ 우선 다각형의 내/외부 판별의 경우 주어진 점 (x, y)의 점 포함 여부와 동일하다.
Ÿ 즉 점 (x, y)에서 시작하여 우측 수평 방향의 반직선 (half-line)입니다.
Ÿ 만약 점이 다각형의 내부에 존재하는 경우 이 반직선은 다각형의 모든 변과 반드시 1회 교차한다
(그림 3 참조).
그림 3. 다각형의 내부에 존재하는 반직선 교차선.
Ÿ 한편 점이 다각형의 외부에 존재하는 경우 반직선은 다각형의 변과는 전혀 교차하지 않거나 다각
형의 내부를 2번 교차 통과한다. 즉 반직선 변의 교차 횟수는 0회 또는 2회가 된다 (그림 4 참조).
Ÿ 따라서 다각형에 대해서는 반직선 변의 교차 횟수가 1회이면 점을 포함하고 있으며 0번 또는 2번이
면 포함하고 있지 않다고 판단 할 수 있다.
그림 4. 다각형의 외부에 존재하는 반직선 교차선.
Ÿ 이러한 판정 조건은 다각형에 대해서도 일반화가 가능하다. 일반 다각형에 대해서는 반직선 변의
교차 횟수가 홀수이면 점을 포함하고 있으며, 짝수이면 포함하고 있지 않다고 판단할 수 있습니다.
5. 제목
2020학년도 1학기 출석수업대체시험 실습과제
작성일
2020-07-17
페이지
5/5
- 5 -
III. 참고문헌
1. 위키백과. (2020). “볼록 다각형”,
https://ko.wikipedia.org/wiki/%EB%B3%BC%EB%A1%9D_%EB%8B%A4%EA%B0%81%ED%98%95.
2. 티스토리. (2016). “[기하] 다각형의 내부 외부 판별”, https://bowbowbow.tistory.com/24.