컴퓨터그래픽스 기본요소

Similar documents
<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D325FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B1E2BABBBFE4BCD22E >

Open GL

Microsoft PowerPoint - lecture3-ch2.ppt

벡터(0.6)-----.hwp

Microsoft Word - cg07-midterm.doc

01

Microsoft PowerPoint - ch02-1.ppt

Microsoft Word - cg08-final-answer.doc

PowerPoint 프레젠테이션

Microsoft PowerPoint - lecture2-opengl.ppt [호환 모드]

<B1B9BEEE412E687770>

Microsoft PowerPoint 다변수 방정식과 함수(1).ppt

고 학년도 9월고수학 1 전국연합학력평가영역문제지 1 1 제 2 교시 수학영역 5 지선다형 3. 두다항식, 에대하여 는? [ 점 ] 1. 의값은? ( 단, ) [ 점 ] 다항식 이 로인수분해될때, 의값은? ( 단,,

슬라이드 1

<BCF6B8AEBFB5BFAA28B0A1C7FC295FC2A6BCF62E687770>

Microsoft PowerPoint - Chapter 9.pptx

2018 학년도대학수학능력시험문제지 1 제 2 교시 홀수형 5 지선다형 1. 두벡터, 모든성분의합은? [2 점 ] 에대하여벡터 의 3. 좌표공간의두점 A, B 에대하여선분 AB 를 으로내분하는점의좌표가 이다. 의값은? [2점] ln

<30325FBCF6C7D05FB9AEC7D7C1F62E687770>

Microsoft PowerPoint - lecture20-ch7.ppt [읽기 전용]

Open GL

<A1DAA1DAA1DA20C6DBC5AC20BCF6C7D020BFCFB7E E687770>

제 2 교시 2019 학년도 3 월고 1 전국연합학력평가문제지수학영역 1 5 지선다형 1. 의값은? [2점] 일차방정식 의해는? [2 점 ] 두수, 의최대공약수는? [2 점 ] 일차함수 의그래프에서

1 1 장. 함수와극한 1.1 함수를표현하는네가지방법 1.2 수학적모형 : 필수함수의목록 1.3 기존함수로부터새로운함수구하기 1.4 접선문제와속도문제 1.5 함수의극한 1.6 극한법칙을이용한극한계산 1.7 극한의엄밀한정의 1.8 연속

스무살, 마음껏날아오르기위해, 일년만꾹참자! 2014학년도대학수학능력시험 9월모의평가 18번두이차정사각행렬 가 를만족시킬때, 옳은것만을 < 보기 > 에서있는대로고른것은? ( 단, 는단위행렬이다.) [4점] < 보기 > ㄱ. ㄴ. ㄷ. 2013학년도대학수학능력시험 16번

6.6) 7.7) tan 8.8) 자연수 10.10) 부등식 두 의전개식에서 의계수는? ) 사건 에대하여 P P 일때, P 의값은? ( 단, 은 의여사건이다.) 일때, tan 의값은? log log 을만족시키

Microsoft PowerPoint - lecture19-ch7.ppt

함수 좌표평면에서 함수 미적분 Ⅱ 1. 여러가지적분법 삼각함수의부정적분 의도함수가 sin 일때, 의값 은? [3점][2011( 가 ) 10월 / 교육청 4] 지수함수의부정적분 가모든실수에서연속일때, 도함수 가 > 이다. 일때, 의

<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770>

문제지 제시문 2 보이지 않는 영역에 대한 정보를 얻기 위하여 관측된 다른 정보를 분석하여 역으로 미 관측 영역 에 대한 정보를 얻을 수 있다. 가령 주어진 영역에 장애물이 있는 경우 한 끝 점에서 출발하여 다른 끝 점에 도달하는 최단 경로의 개수를 분석하여 장애물의

(Microsoft PowerPoint - Ch19_NumAnalysis.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 07-Data Manipulation.pptx

<B1B9BEEE412E687770>

최종 고등수학 하.hwp

11장 포인터

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - lecture2-opengl.ppt

Microsoft PowerPoint - LA_ch6_1 [호환 모드]

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

MGFRSQQFNTOD.hwp

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft Word - cg09-midterm.doc

Microsoft Word - cg12-midterm-answer

1 peaieslvfp3 1. 두점사이의거리 수직선위의두점사이의거리를구할수있다. 좌표평면위의두점사이의거리를구할수있다. 수직선위의두점사이의거리 todrkrgo qhqtlek 오른쪽그림은충무로역을중심으로한서울시지하철 3`호선노선도의일부분이다. 충무로역을` 0, 을지로 3`

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

2017 학년도대학수학능력시험문제지 1 제 2 교시 홀수형 5 지선다형 3. sin 의값은? [2점] 1. 두벡터, 모든성분의합은? [2 점 ] 에대하여벡터 의 lim 의값은? [2점] ln 두사건 와 는

7) 다음의 다음 9) 남학생과 9. zb 여학생 각각 명이 갖고 있는 여름 티 셔츠의 개수를 조사하여 꺾은선그래프로 나타낸 것 이다. 이 두 그래프의 설명으로 옳지 않은 것은? ㄱ. ㄴ. 회째의 수학 점수는 점이다. 수학 점수의 분산은 이다. ㄷ. 영어점수가 수학 점

5.5) cos 6.6) 두 coscos 일때, sinsin 의값은? [3점] ) 일때, 방정식 의모든해의합은? [3 점 ] 1 4 sin cos 의값은? [3점] 1 ln 2 ln 3 ln 4 ln 5 ln 8.8 ) 벡터 에대하여

OCW_C언어 기초

여러가지활용문제 정태와동혁이가계단에서가위바위보를하는데, 이기면두계단올라가고, 지면한계단내려간다고한다. 처음보다정태는 계단, 동혁이는 계단올라가있을때, 정태가이긴횟수를구하시오. 1) % 의소금물 과 % 의소금물 을섞었더니 % 의소금물이되었다. 의값을구하여라. 5) 오른쪽

2019 학년도대학수학능력시험문제및정답

그래픽스 기본요소의 속성

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - lecture18-ch7 [호환 모드]

Microsoft PowerPoint - lecture18-ch7.ppt [호환 모드]

7.7) 정의역이 8.8) 연속확률변수 10.10) 원점을 좌표평면에서 인함수 의그래프가그림 과같다. 9.9 ) 함수 의그래프와함수 의 그래프가만나는점을 라할때, 옳은것만을 < 보기 > 에서있는대로고른것은? lim lim 의값은? < 보기 > ㄱ. ㄴ

중간고사

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap04-연산자.pptx

일반각과호도법 l 삼각함수와미분 1. 일반각 시초선 OX 로부터원점 O 를중심으로 만큼회전이동한위치에동경 OP 가있을때, XOP 의크기를나타내는각들을 ( 은정수 ) 로나타내고 OP 의일반각이라한다. 2. 라디안 rad 반지름과같은길이의호에대한중심각의 크기를 라디안이라한

PSFZWLOTGJYU.hwp

Intensive Math Class I 공간기하벡터 강사최석호 1. 단면은수직으로 A, B 두평면사이각의코사인값을구하시오

PowerPoint 프레젠테이션

math_hsj_kK5LqN33.pdf.hwp

Microsoft Word - cg07-final.doc

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

2013 학년도수학성취도측정시험 (2013학년도수시모집및외국인특별전형합격자대상 ) 2012년 12월 18일, 고사시간 90분 1번부터 11번까지는단답형이고, 12번부터 16번까지는서술형입니다. 답안지는깨끗한글씨로바르게작성하되, 단답형은답만쓰고, 서술형은풀이과정과답을명시

STATICS Page: 7-1 Tel: (02) Fax: (02) Instructor: Nam-Hoi, Park Date: / / Ch.7 트러스 (Truss) * 트러스의분류 트러스 ( 차원 ): 1. 평면트러스 (planar tru

PowerPoint 프레젠테이션

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

설계란 무엇인가?

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - 06-Body Data Class.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

구분 : 수학 / 이차곡선대상 : 고등학교 1 학년 제목 : 이차곡선 : 항공기곡면설계 (Lofting) 이차곡선의정의 이차곡선 (Quadratic Curve) 는원뿔곡선 (Conic Curve) 라고불린다. 이는그리스수학자아폴로니오스 (Apollonios, BC 26

기초제도14강

Microsoft PowerPoint 힘의과학-Week12-Chapter10(배포용) [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04primitives.ppt

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

제 53 회서울특별시과학전람회 예선대회작품설명서 본선대회작품설명서 쓰나미의피해를최소화시키는건물과 건물배치에대한탐구 출품번호 S-504 출품분야학생부출품부문지구과학 학교명학년 ( 직위 ) 성명

기하벡터 0816.hwp

Java ...

Microsoft PowerPoint - Java7.pptx

기본도형과작도 1 강 - 연습문제 1. 오른쪽그림과같이직선l 위에점,, 가있을때, 옳지않은것은? 1 = 2 = 3 = 직선l 4 = 5 = l 2. 오른쪽그림에서 = = 이다. 다음( ) 안에알맞은수를쓰시오. 1 =( 2 =( 3 =( 4 =( ) ) ) ) 3. 한평

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

PowerPoint 프레젠테이션

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

1 경영학을 위한 수학 Final Exam 2015/12/12(토) 13:00-15:00 풀이과정을 모두 명시하시오. 정리를 사용할 경우 명시하시오. 1. (각 6점) 다음 적분을 구하시오 Z 1 4 Z 1 (x + 1) dx (a) 1 (x 1)4 dx 1 Solut

Mathema Barista Type Daily Quiz 20 수1_기하과 벡터- part1.hwp

윈도우즈프로그래밍(1)

<4D F736F F D20536F6C69645F30345FC0FCB4DCB7C2B0FA20B1C1C8FBB8F0B8E0C6AE2E646F63>

7.3 Ampee 의주회법칙 Mwell 방정식 Ampee 의주회법칙 Ampee 의주회법칙은폐경로의주변을따른 의접선성분에대한선적분은폐경로에의해둘러싸이는순전류 enc 와같다. 즉 의회전은 enc 와같다. dl enc Ampee 의법칙의적분형 Ampee 의주회법칙유도 enc

Microsoft PowerPoint - lecture3-ch2.ppt [호환 모드]

Transcription:

Video & Image VIPLProcessing Lab. 2014-1 Myoung-Jin Kim, Ph.D. (webzealer@ssu.ac.kr)

목차 1 점그리기 2 선그리기 3 원그리기 4 다각형그리기

점그리기 점 하나의좌표로표현되는기하요소 y 3 차원그래픽스에서는기본적으로 50 x, y, z 의세좌표축으로표현되는 3 차원직교좌표계를사용하여 점의좌표를표현함 0 100 x X 와 y 축으로표현되는 2 차원 평면은 z 축의값이 0 인 3 차원 좌표로볼수있음 z

OpenGL - 꼭짓점지정 glvertex* 함수 void glvertex*( 좌표 ); * : 접미사코드 첫째 둘째 2, 3, 또는 4 : 좌표공간의차원 OpenGL 에서는기본적으로 3 차원을사용하지만, 2 차원인경우 z 좌표를 0 으로계산함 4 차원은동차좌표계로기하변환에서사용 i(integer), s(short), f(float), d(double) 셋째 v : 배열형태 (vector) 의좌표지정 교재관련부분 : 66 쪽

OpenGL - 꼭짓점지정 glvertex* 함수 void glvertex*( 좌표 ); 예 glvertex2i(50, 100); glvertex3f(50.0f, 100.0f, 0.0f); glvertex4d(50.0, 100.0, 0.0, 1.0); GLint point[ ] = {50, 100}; glvertex2iv(point); 교재관련부분 : 66 쪽

OpenGL - 점그리기 glvertex* 함수로좌표위치지정 glbegin 함수와 glend 함수사이에좌표를나열 void glbegin(glenum mode); void glend(void); mode : 그리고자하는도형을나타내는상수 GL_POINT, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON 점그리기에서는 glbegin 함수에 GL_POINTS 상수를입력 교재관련부분 : 67 쪽

OpenGL - 점그리기 예 glbegin(gl_points); glvertex2i(50, 100); glend( ); y 200 GLint p[3][2] = {{50, 100}, {75, 150}, {100, 200}}; glbegin(gl_points); glvertex2iv(p[0]); glvertex2iv(p[1]); glvertex2iv(p[2]); glend( ); 150 100 50 50 100 150 x 교재관련부분 : 66~68 쪽

OpenGL - 점크기지정 glpointsize 함수 void glpointsize(glfloat psize); psize : 점의직경, 디폴트는 1.0 glbegin 과 glend 내부에넣으면안됨 예 glpointsize(5.0); glbegin(gl_points); glvertex2f(100, 150); glend( ); 교재관련부분 : 66~68 쪽

목차 1 2 3 점그리기 선그리기 원그리기 4 다각형그리기

OpenGL - 직선그리기 glbegin 함수와 glend 함수사이에 glvertex* 함수로양끝점좌표위치지정끝점을연결하는세가지방법중하나를 glbegin에서지정 GL_LINES : 나열된끝점들을두개씩짝을지어선분을그림 GL_LINE_STRIP : 나열된점들을계속연결하여다중선을그림 GL_LINE_LOOP : 나열된점들을계속연결하여닫힌다중선을그림 교재관련부분 : 68~69 쪽

OpenGL - 직선그리기 예 glbegin(gl_lines); glvertex2iv(p1); glvertex2iv(p2); glvertex2iv(p3); glvertex2iv(p4); glvertex2iv(p5); glend( ); p5 p2 p3 p4 p1 교재관련부분 : 68~69 쪽

OpenGL - 직선그리기 예 glbegin(gl_line_strip); glvertex2iv(p1); glvertex2iv(p2); glvertex2iv(p3); glvertex2iv(p4); glvertex2iv(p5); glend( ); p5 p2 p3 p4 p1 교재관련부분 : 68~69 쪽

OpenGL - 직선그리기 예 glbegin(gl_line_loop); glvertex2iv(p1); glvertex2iv(p2); glvertex2iv(p3); glvertex2iv(p4); glvertex2iv(p5); glend( ); p5 p2 p3 p4 p1 교재관련부분 : 68~69 쪽

직선방정식 기울기 - 절편방정식 y y = m x + b y 2 y 1 m = y 2 - y 1 x 2 - x 1 b O x 1 x 2 x y = m x x = y / m 교재관련부분 : 71 쪽

DDA 알고리듬 DDA 알고리듬개요 Digital Differential Analyzer 한축의좌표를 1씩변화시킬때, 다른축의좌표를직선의기울기 ( 또는기울기의역수 ) 만큼변화시켜다음점의좌표계산 기울기 ( 또는기울기의역수 ) 의절대값이 1 이하가되게기준축을정함 계산된좌표를반올림하여구한정수좌표위치에점을그림 교재관련부분 : 71~73 쪽

DDA 알고리듬 y y y end y = m x + b y end Δy = 1 y = m x + b y 0 x 0 Δx = 1 x end x y 0 x 0 x end x x end -x 0 y end -y 0 x k+1 = x k + 1 y k+1 = y k + m x end -x 0 < y end -y 0 y k+1 = y k + 1 x k+1 = x k + 1/m 실수좌표가발생 실수좌표가발생 (x k+1, Round(y k+1 )) (Round(x k+1 ), y k+1 ) 교재관련부분 : 71~73 쪽

DDA 알고리듬 #define round(x) (int((x) >= 0? (x)+0.5 : (x)-0.5)) void DDA(int x0, int y0, int xend, int yend) { //Assume (x0, y0) (xend, yend) y int dx = xend - x0, dy = yend - y0, steps, k; float xincrement, yincrement, x = x0, y = y0; } if (abs(dx) > abs(dy)) else steps = abs(dx); steps = abs(dy); xincrement = float (dx) / float (steps); yincrement = float (dy) / float (steps); setpixel(round(x), round(y)); for (k = 0; k < steps ; k++) { x += xincrement; y += yincrement; setpixel(round(x), round(y)); } steps steps void setpixel(glint x, GLint y) { glbegin(gl_points); glvertex2i(x, y); glend(); } x 교재관련부분 : 73 쪽

DDA 알고리듬 DDA 알고리듬의특성 기울기의크기에따라한축의좌표는 1, 다른축의좌표는 m 또는 1/m만큼변화시키며다음좌표를계산하여가장가까운픽셀을그림 문제점 부동소수점계산을해야함 반올림및부동소수점연산으로시간이많이소비됨 긴선분의경우부동소수점연산의오차가누적되어정확한직선경로를벗어날수있음 교재관련부분 : 73 쪽

Bresenham 의직선알고리듬 기울기가 0 과 1 사이인직선 k 번째점 (x k, y k ) y k +2 y k +1 y k?? k+1 번째점 (x k+1, y k+1 ) x k+1 = x k +1 x k x k +3 x k +2 x k +1 y k y k+1 =? yk +1 중간점알고리즘 (midpoint algorithm) 교재관련부분 : 73 쪽

Bresenham 의직선알고리듬 y (x r, y r ) 기울기가 0 과 1 사이인직선 (x l, y l ) 선분 (x l, y l ) - (x r, y r ) x y k +2 y k +1 y k P k?? x k+1 x k U k+1 M k+1 L k+1 x k+3 x k+2 H H y = x + y l - x W W l y l = y = H W W = x r - x l H = y r - y l H W x l + b x + b x 에 x l, y 에 y l 을넣어 b 를계산 b = y l - H W 교재관련부분 : 74 쪽 x l

Bresenham 의직선알고리듬 기울기가 0 과 1 사이인직선 선분 (x l, y l ) - (x r, y r ) y k +2 y k +1 y k P k?? U k+1 L k+1 x k+3 x k+2 x k+1 x k H H y = x + y l - x W W l M k+1 H H y > x + y l - x W W l (x, y) 가직선위에있음 H H y < x + y l - x W W l (x, y) 가직선아래에있음

Bresenham 의직선알고리듬 기울기가 0 과 1 사이인직선 y k +2 y k +1 y k P k?? U k+1 M k+1 L k+1 x k+3 x k+2 x k+1 x k 선분 (x l, y l ) - (x r, y r ) H H y > x + y l - x W W l H H -y + x + y l - x l < 0 W W 양변에 w 를곱한다 -Wy + Hx + Wy l Hx l < 0 양변에 2 를곱한다 -2Wy + 2Hx + 2Wy l 2Hx l < 0 F(x, y) = -2W(y - y l ) + 2H(x - x l ) < 0 > 0 (x, y) 가직선위에있음 (x, y) 가직선아래에있음

Bresenham 의직선알고리듬 기울기가 0 과 1 사이인직선 선분 (x l, y l ) - (x r, y r ) y k +2 y k +1 y k P k?? U k+1 M k+1 L k+1 x k+3 x k+2 x k+1 x k H H y > x + y l - x W W l (x, y) 가직선위에있음 H H y < x + y l - x W W l (x, y) 가직선아래에있음 F(M k+1 ) < 0 > 0 M k+1 이직선위에있음 M k+1 이직선아래에있음 P k+1 = L k+1 = (x k +1, y k ) P k+1 = U k+1 = (x k +1, y k +1) 교재관련부분 : 74~75 쪽

Bresenham 의직선알고리듬 (x k+1, y k+1 ) 을결정하기위한판별식 M k+1 = (x k +1, y k +0.5) F(M k+1 ) = -2W(y k + 0.5 - y l ) + 2H(x k + 1 - x l ) 다음위치를계산하기위한정수형판별식 (x k+2, y k+2 ) 를결정하기위한판별식 F(M k+1 ) < 0 인경우 1 M k+2 = (x k +2, y k +0.5) F(M k+2 ) = -2W(y k + 0.5 - y l ) + 2H(x k + 2 - x l ) = F(M k+1 ) + 2H y k +2 y k +1 y k 이전수식에정수값만더한다 P k? x k P k+1? U k+2 M k+2 L k+2 x k +3 x k +2 x k +1 교재관련부분 : 74~75 쪽

Bresenham 의직선알고리듬 (x k+1, y k+1 ) 을결정하기위한판별식 M k+1 = (x k +1, y k +0.5) F(M k+1 ) = -2W(y k + 0.5 - y l ) + 2H(x k + 1 - x l ) (x k+2, y k+2 ) 를결정하기위한판별식 F(M k+1 ) > 0 인경우 2 M k+2 = (x k +2, y k +1.5) F(M k+2 ) = -2W(y k + 1.5 - y l ) + 2H(x k + 2 - x l ) = F(M k+1 ) + 2(H - W) y k +2 y k +1 y k P k+1 L k+2 P k x k?? x k +2 x k +1 U k+2 M k+2 x k +3 교재관련부분 : 74~75 쪽

Bresenham 의직선알고리듬 판별식의초기값 F(M 1 ) M 1 = (x l +1, y l +0.5) F(M 1 ) = -2W(y l + 0.5 - y l ) + 2H(x l + 1 - x l ) = 2H W 다음픽셀위치의결정및판별식갱신 F < 0 인경우 F > 0 인경우 (x k+1, y k ) 위치에점을그림 F F + 2H (x k +1, y k +1) 위치에점을그림 F F + 2(H - W) 교재관련부분 : 74~75 쪽

Bresenham 의직선알고리듬 예 : (1, 1) (6, 4) W = 5, H = 3 F = 2H W = 1 F < 0 : F F + 6, y k+1 = y k 2H F 0 : F F - 4, y k+1 = y k + 1 2(H-W) k 0 1 2 3 4 F (x k+1, y k+1 ) 1 (2, 2) -3 (3, 2) 3 (4, 3) -1 (5, 3) 5 (6, 4) 5 4 3 2 1 0 0 1 2 3 4 5 6 7 교재관련부분 : 74~75 쪽

Bresenham 의직선알고리듬 void bresenham_line (int xl, int yl, int xr, int yr) { // Assume 0 < H/W < 1 int x, y = yl, W = xr - xl, H = yr - yl; int F = 2 * H - W, df1 = 2 * H, df2 = 2 * (H - W); } for ( x = xl; x <= xr; x++) { setpixel(x, y); if (F < 0) F += df1; else { y++; F += df2; } } 교재관련부분 : 75~76 쪽

목차 1 2 3 점그리기 선그리기 원그리기 4 다각형그리기

원뿔곡선 (conic sections) 원, 타원포물선쌍곡선

원뿔곡선 (conic sections) 원뿔곡선의방정식 Ax 2 + Bxy + Cy 2 + Dx + Ey + F = 0 A, B, C 중최소한하나는 0 이아님 B 2-4AC < 0 타원또는원 (A=C 이고 B=0 인경우 ) B 2-4AC = 0 B 2-4AC > 0 포물선 쌍곡선

원뿔곡선 (conic sections) 원의방정식 중심이 (x c, y c ), 반경이 r 인원 (x - x c ) 2 + (y - y c ) 2 = r 2 y r (x c, y c ) (x, y) (y-y c ) (x-x c ) x

원뿔곡선 (conic sections) 타원의방정식 장축과단축이좌표축에정렬된방향에놓인경우 x - x c r x 2 + y - y c r y 2 = 1 (-x, y) y r y r y (x, y) 타원의방정식 (-x, -y) r x x (x, -y) x c = 0, y c = 0 인타원 대칭

원뿔곡선 (conic sections) 포물선의방정식 준선이 x 축과평행한경우 y = ax 2 + bx + c y y = a(x - m) 2 + n 초점 최소점 (m, n) 준선 x

원뿔곡선 (conic sections) 쌍곡선의방정식 준선이 y 축과평행한경우 x r x 2 - y r y 2 = 1 초점 y x 준선

원의방정식 데카르트좌표계에서원의방정식 y 실수연산 r (x, y) (x - x c ) 2 + (y - y c ) 2 = r 2 y c r x c x 의범위 r x y = y r 2 - (x - x c ) 2 c ± x c - r x x c + r (y - y c ) 2 = r 2 - (x - x c ) 2 y - y r 2 - (x - x c ) 2 c =

원의방정식 극좌표를이용한원의방정식 y (x, y) 실수연산 y c r r cos r sin x = x c + r cos y = y c + r sin x c x

중간점원그리기알고리듬 원주상의좌표계산 y y c y x c x y x=y r 원의대칭성이용 45 x x 중심좌표가 (0, 0) 인원의좌표들을구한후 (x c, y c ) 를더하여실제좌표들을구함 단위 x좌표변화 ( 즉, x=1) 에대한 y좌표변화크기가 1보다작은구간에서원주상의좌표를구함 x=0부터 x=y가되는구간

중간점원그리기알고리듬 원의대칭성을이용한좌표계산 (-x, y) (-y, x) (-y, -x) (-x, -y) 45 (x, y) (x, -y) (y, x) (y, -x) void circlepoints (int xc, int yc, int x, int y) { setpixel(xc+x, yc+y); setpixel(xc-x, yc+y); setpixel(xc+x, yc-y); setpixel(xc-x, yc-y); setpixel(xc+y, yc+x); setpixel(xc-y, yc+x); setpixel(xc+y, yc-x); setpixel(xc-y, yc-x); }

중간점원그리기알고리듬 판별함수 x 2 + y 2 > r 2 x 2 + y 2 < r 2 x 2 + y 2 = r 2 P k U k+1 y k? M y k -1? k+1 y k -2 L k+1 F(x, y) = x 2 + y 2 - r 2 x k x k +3 x k +2 x k +1 F(x, y) < 0, 원내부 = 0, 원경계 > 0, 원외부

중간점원그리기알고리듬 판별함수값에따른다음좌표결정 P k U k+1 y k? M y k -1? k+1 y k -2 L k+1 P k U k+1 y k? M y k -1? k+1 y k -2 L k+1 x k +3 x k +2 x k +1 x k x k +3 x k +2 x k +1 x k F(M k+1 ) < 0 인경우 P k+1 = U k+1 = (x k +1, y k ) F(M k+1 ) > 0 인경우 P k+1 = L k+1 = (x k +1, y k -1)

중간점원그리기알고리듬 (x k+1, y k+1 ) 을결정하기위한판별식 M k+1 = (x k +1, y k -0.5) F(M k+1 ) = (x k +1) 2 + (y k -0.5) 2 - r 2 (x k+2, y k+2 ) 를결정하기위한판별식 F(M k+1 ) < 0 인경우 M k+2 = (x k + 2, y k - 0.5) F(M k+2 ) = F(M k+1 ) + 2x k + 3 y k -1 y k -2 y k P k P k+1?? U k+2 M k+2 L k+2 x k +3 x k +2 x k +1 x k

중간점원그리기알고리듬 (x k+1, y k+1 ) 을결정하기위한판별식 M k+1 = (x k +1, y k -0.5) F(M k+1 ) = (x k +1) 2 + (y k -0.5) 2 - r 2 (x k+2, y k+2 ) 를결정하기위한판별식 F(M k+1 ) > 0 인경우 M k+2 = (x k + 2, y k - 1.5) F(M k+2 ) = F(M k+1 ) + 2x k - 2y k + 5 y k -1 y k -2 y k P k U k+2 P k+1 x k? M L k+2 k+2? x k +2 x k +1 x k +3

중간점원그리기알고리듬 P 0 판별식의초기값 F(M 1 ) P 0 = (0, r), M 1 = (1, r - 0.5) F(M 1 ) = 1 2 + (r - 0.5) 2 - r 2 = 1.25 - r 1 - r 0.25 는판별식의부호를결정하는데영향을주지않음 다음픽셀위치의결정및판별식갱신 F < 0인경우 (x k+1, y k ) 위치에점을그림 F F + 2x k + 3 중심좌표및반경이모두정수인경우 F > 0 인경우 (x k +1, y k -1) 위치에점을그림 F F + 2x k - 2y k + 5

중간점원그리기알고리듬 void bresenham_circle (int xc, int yc, int radius) { void circlepoints(int, int, int, int); int F = 1 - radius, x = 0, y = radius; circlepoint(xc, yc, x, y); while (y > x) { if (F < 0) F += x * 2 + 3; else { F += (x - y) * 2 + 5; y--; } x++; circlepoint(xc, yc, x, y); } }

목차 1 2 3 4 점그리기선그리기원그리기다각형그리기

다각형 다각형의정의 세개이상의선분으로둘러싸인평면도형 모서리 (edge) 또는변 (side) : 다각형을구성하는선분 꼭짓점 (vertex) : 2개의변이만나는점 꼭짓점 변, 모서리 교재관련부분 : 83 쪽

다각형 볼록다각형과오목다각형 볼록 (convex) 다각형 : 모든내각들이 180 이하인다각형 오목 (concave) 다각형 : 볼록하지않은다각형 (180 이상인내각이존재함 ) 볼록다각형 오목다각형 교재관련부분 : 84 쪽

다각형 볼록다각형과오목다각형의판별 꼭짓점을와인딩순서에따라연결하는벡터로보고두인접벡터의외적을구함 y E3 E3 E4 E2 E3 E2 E4 E1 E4 E1 E1 E2 < 180 z방향 z 모든외적의방향이동일 x z y E4 E3 E3 E4 E4 E5 E2 E3 E5 E2 E1 E1 E5 E1 E1 E2 일부외적의방향이반대 x 교재관련부분 : 85 쪽

다각형 내부 / 외부검사 홀 - 짝규칙적용 외부의점 경계상자 P1 내부 P2 외부 교재관련부분 : 86 쪽

다각형 다각형의표현 꼭짓점, 변, 각면정보를저장하는표를사용 V 1 변표 E 1 : V 1, V 2, S 1 E 1 E 3 E 6 E 2 : V 2, V 3, S 1 V 2 E 2 S 1 S2 V 3 E 4 V 4 E 5 V 5 꼭짓점표 V 1 : x 1, y 1, z 1 V 2 : x 2, y 2, z 2 E 3 : V 3, V 1, S 1, S 2 E 4 : V 3, V 4, S 2 E 5 : V 4, V 5, S 2 E 6 : V 5, V 1, S 2 V 3 : x 3, y 3, z 3 각면표 V 4 : x 4, y 4, z 4 S 1 : E 1, E 2, E 3 V 5 : x 5, y 5, z 5 S 2 : E 3, E 4, E 5, E 6 교재관련부분 : 87 쪽

다각형 다각형의앞면과뒷면 눈에보이는면 ( 앞면 ) 과보이지않는객체내부의면 ( 뒷면 ) z y N = (A, B, C) Ax + By + Cz + D = 0 x Ax + By + Cz + D > 0 (x, y, z) 는평면앞에위치 Ax + By + Cz + D < 0 (x, y, z) 는평면뒤에위치 교재관련부분 : 88 쪽

다각형 와인딩 (winding) 다각형의앞면을정의하기위해정한꼭짓점의나열순서 시계반대방향 (CCW) 와인딩 y y 시계방향 (CW) 와인딩 V 2 V 2 (V 0, V 1, V 2 ) (V 0, V 2, V 1 ) V 0 V 1 x V 0 V 1 x 다각형의정면 ( 디폴트값 ) 다각형의뒷면 교재관련부분 : 84 쪽

OpenGL 의다각형그리기 glbegin 함수에그리고자하는다각형의종류를입력 GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON 교재관련부분 : 89~93 쪽

OpenGL 의다각형그리기 GL_TRIANGLES glbegin(gl_triangles); glvertex2i(0, 0); glvertex2i(20, 0); glvertex2i(10, 10); glend(); (10, 10) (0, 0) (20, 0) 교재관련부분 : 89 쪽

OpenGL 의다각형그리기 GL_TRIANGLE_STRIP glbegin(gl_triangle_strip); glvertex2iv(v0); V0 V2 V4 glvertex2iv(v1); glvertex2iv(v2); glvertex2iv(v3); glvertex2iv(v4); glend(); V1 V3 교재관련부분 : 89~90 쪽

OpenGL 의다각형그리기 GL_TRIANGLE_FAN glbegin(gl_triangle_fan); glvertex2iv(v0); glvertex2iv(v1); glvertex2iv(v2); glvertex2iv(v3); glvertex2iv(v4); glend(); V1 V0 V2 V3 V4 교재관련부분 : 90~91 쪽

OpenGL 의다각형그리기 GL_QUADS glbegin(gl_quads); glvertex2iv(v0); glvertex2iv(v1); glvertex2iv(v2); glvertex2iv(v3); glend(); V0 V1 V3 V2 교재관련부분 : 91~92 쪽

OpenGL 의다각형그리기 GL_QUAD_STRIP glbegin(gl_quad_strip); glvertex2iv(v0); glvertex2iv(v1); V0 V2 V4 glvertex2iv(v2); glvertex2iv(v3); glvertex2iv(v4); glvertex2iv(v5); glend(); V1 V3 V5 교재관련부분 : 92 쪽

OpenGL 의다각형그리기 GL_POLYGON glbegin(gl_polygon); glvertex2iv(v0); glvertex2iv(v1); glvertex2iv(v2); V1 V0 V4 glvertex2iv(v3); glvertex2iv(v4); glend(); V2 V3 교재관련부분 : 93 쪽

정리하기 1 OpenGL 에서꼭짓점을지정하기위해서는 glvertex* 함수를사용한다. 2 OpenGL 에서도형을그릴때는 glbegin 함수와 glend 함수사이에꼭짓점을나열한다. 이때 glbegin 함수에그리고자하는 도형및그리기방법을나타내는상수를전달한다. 점그리기상수 : GL_POINTS 선분그리기상수 : GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP 삼각형그리기상수 : GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP 사각형그리기상수 : GL_QUADS, GL_QUAD_STRIP 다각형그리기상수 : GL_POLYGON

정리하기 3 DDA 알고리듬은한축의좌표를 1 씩변화시킬때, 다른축의좌표를직선의기울기 ( 또는기울기의역수 ) 만큼변화시켜다음 점의좌표계산한다. 4 Bresenham 직선알고리듬 정수형덧셈연산만으로직선상의점들의위치를계산할수있는알고리듬 기울기가 0과 1 사이의값이라고가정할때, 어느점에서 x좌표가 1 증가할경우 y좌표는그대로이거나 1만큼증가 이를판단할수있는판별식을통해점증적으로직선상의점들의위치를계산

정리하기 5 꼭짓점을나열하는와인딩에의해다각형의앞면방향을정의할수있다. 6 볼록다각형은꼭짓점을와인딩순서에따라연결하는벡터들에대해두인접벡터쌍의외적의방향이모두같다. 7 다각형외부의점으로부터어떠한점을잇는선이다각형경계와교차하는횟수가홀수이면그점은다각형내부이고, 짝수 이면외부이다.