1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Đồ họa máy tính docx

174 986 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồ họa máy tính
Trường học Trường Đại Học
Chuyên ngành Đồ họa máy tính
Thể loại Đồ án
Năm xuất bản 2005
Thành phố Hà Nội
Định dạng
Số trang 174
Dung lượng 1,17 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

cu˙’a mˆo˜i pixel trˆen c´ac thiˆe´t bi... thˆo´ng trong viˆe.c biˆe˙’u diˆe˜n hˆe.. Ch´ung ta muˆo´n bao h`am c´ac pixel n`ay trong h`ınh ch˜u.. v´o.i nhiˆe` u pixel trˆen mˆo˜i cˆo.t n

Trang 1

Đồ họa máy tính

Trang 2

D - ˆ ` HO.A M´AY T´INH I O

Pha.m Tiˆe´n So.n

D - `a La.t, 2005

Trang 4

Mu.c lu.c

1.1 D- oa.n thˇa˙’ng 9

1.1.1 Thuˆa.t to´an sˆo´ gia 11

1.1.2 Thuˆa.t to´an d¯iˆe˙’m gi˜u.a 13

1.1.3 Mˆo.t sˆo´ vˆa´n d¯ˆe` liˆen quan d¯ˆe´n thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng 18

1.1.4 C´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng 21

1.2 D- u.`o.ng tr`on 22

1.2.1 D- ˆo´i x´u.ng t´am d¯iˆe˙’m 22

1.2.2 Thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng tr`on 23

1.3 D- u.`o.ng cong ellipse 28

1.3.1 Ellipse c´o da.ng ch´ınh tˇa´c 29

1.3.2 Ellipse trong tru.`o.ng ho p tˆo˙’ng qu´at 34

2 H`ınh ho.c cu˙’a c´ac d¯u.`o.ng cong v`a mˇa.t cong 47 2.1 Mo.˙’ d¯ˆa` u 47

Trang 5

2.2 D- u.`o.ng cong Bezier 48

2.2.1 Thuˆa.t to´an de Casteljau 48

2.2.2 D- a th´u.c Bernstein v`a d¯u.`o.ng cong Bezier 52

2.3 C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong Bezier 55

2.3.1 D- iˆe` u khiˆe˙’n d¯i.a phu.o.ng 59

2.4 D- a th´u.c t`u.ng kh´uc v`a c´ac h`am spline 60

2.4.1 Su.˙’ du.ng c´ac h`am spline nhu c´ac h`am trˆo.n 63

2.4.2 Xˆay du ng c´ac h`am trˆo.n 65

2.4.3 D- u.`o.ng cong spline v`a c´ac h`am co so.˙’ 66

2.4.4 C´ac h`am B-spline co so.˙’ 66

2.4.5 Su.˙’ du.ng c´ac knot bˆo.i 71

2.4.6 Vector knot chuˆa˙’n 73

2.5 C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong B-spline 75

2.6 Nˆo.i suy c´ac d¯iˆe˙’m d¯iˆe` u khiˆe˙’n bˇa`ng d¯u.`o.ng cong B-spline 77

2.7 Thiˆe´t kˆe´ c´ac mˇa.t Bezier v`a B-spline 80

2.7.1 Patch Bezier 80

2.7.2 D´an c´ac patch Bezier 81

2.7.3 Patch spline 82

3 Giao cu˙’a c´ac d¯ˆo´i tu.o ng 83 3.1 Mo.˙’ d¯ˆa` u 83

3.2 Giao cu˙’a hai d¯oa.n thˇa˙’ng 83

3.2.1 Phˆan t´ıch 84

Trang 6

3.2.2 Thuˆa.t to´an x´ac d¯i.nh giao hai d¯oa.n thˇa˙’ng 86

3.3 D- oa.n thˇa˙’ng v`a h`ınh ch˜u nhˆa.t 87

3.3.1 T`ım giao bˇa`ng c´ach gia˙’i hˆe c´ac phu.o.ng tr`ınh 89

3.3.2 Thuˆa.t to´an chia nhi phˆan 89

3.3.3 Thuˆa.t to´an Cohen-Sutherland 93

3.3.4 Thuˆa.t to´an Liang-Barsky 97

3.4 Giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i 100

3.4.1 Vi tr´ı tu.o.ng d¯ˆo´i cu˙’a mˆo.t d¯iˆe˙’m v´o.i d¯u.`o.ng thˇa˙’ng 100

3.4.2 Thuˆa.t to´an t`ım giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i 102

3.5 Giao hai d¯a gi´ac 107

3.5.1 Thuˆa.t to´an Sutherland-Hodgman 108

3.5.2 Thuˆa.t to´an Weiler-Atherton 111

3.5.3 C´ac ph´ep to´an tˆa.p ho p trˆen c´ac d¯a gi´ac 113

3.6 Ray tracing hai chiˆe` u: pha˙’n xa trong buˆo`ng k´ın 114

3.6.1 Vector pha˙’n xa 115

3.6.2 Giao cu˙’a tia s´ang v`a d¯u.`o.ng thˇa˙’ng 117

3.6.3 Giao cu˙’a tia s´ang v´o.i d¯u.`o.ng tr`on 121

3.6.4 Xˆay du ng v´ı du ray tracing 124

3.6.5 Buˆo`ng k´ın l`a ellipse 126

4 Tˆo m`au v`ung 127 4.1 C´ac d¯i.nh ngh˜ıa 127

4.1.1 V`ung d¯i.nh ngh˜ıa bo.˙’i pixel 127

Trang 7

4.1.2 V`ung d¯i.nh ngh˜ıa bo.˙’i d¯a gi´ac 129

4.2 Thuˆa.t to´an tˆo m`au theo vˆe´t dˆa`u loang 129

4.3 Thuˆa.t to´an tˆo m`au theo con cha.y 131

4.4 Thuˆa.t to´an tˆo m`au theo biˆen 134

4.5 So s´anh c´ac thuˆa.t to´an 144

4.6 Tˆo m`au c´ac h`ınh ch˜u nhˆa.t 145

4.7 Thuˆa.t to´an tˆo m`au d¯a gi´ac 147

4.7.1 C´ac d`ong qu´et ngang 150

4.7.2 C´ac ma˙’nh vu.n 151

4.7.3 Liˆen kˆe´t ca.nh v`a thuˆa.t to´an tr`an 151

4.7.4 Tˆo m`au c´ac d¯a gi´ac chˆo`ng nhau 158

4.8 Tˆo m`au theo mˆa˜u tˆo 161

Trang 8

L` o.i n´ oi d¯ˆ ` u a

D- ˆo` ho.a m´ay t´ınh l`a mˆo.t l˜ınh vu c hˆa´p dˆa˜n cu˙’a khoa ho.c m´ay t´ınh Ch´ung ta su.˙’ du.ng d¯ˆo` ho.am´ay t´ınh nhu mˆo.t cˆong cu d¯ˆe˙’ quan s´at thˆong tin trong nhiˆe` u l˜ınh vu c kh´ac nhau, bao gˆo`mkhoa ho.c v`a cˆong nghˆe., ho´a ho.c, kiˆe´n tr´uc v`a gia˙’i tr´ı C´ac chu.o.ng tr`ınh d¯ˆo` ho.a tu.o.ng t´accho ph´ep ngu.`o.i su.˙’ du.ng l`am viˆe.c theo c´ach tu nhiˆen nhˆa´t: ngu.`o.i su.˙’ du.ng cung cˆa´p thˆongtin cho tr`ınh ´u.ng du.ng thˆong qua c´ac hoa.t d¯ˆo.ng bˆen ngo`ai cu˙’a ho v`a s˜e nhˆa.n d¯u.o c thˆongtin tro.˙’ la.i bˇa`ng h`ınh a˙’nh D- ˆo` ho.a m´ay t´ınh d¯ang gi´up con ngu.`o.i thay d¯ˆo˙’i vˆe` quan niˆe.m v`ac´ach th´u.c su.˙’ du.ng m´ay t´ınh

Gi´ao tr`ınh D - ˆo` ho.a m´ay t´ınh I cung cˆa´p mˆo.t sˆo´ k˜y thuˆa.t co ba˙’n cu˙’a d¯ˆo` ho.a m´ay t´ınh

hai chiˆe` u (D- ˆo` ho.a m´ay t´ınh ba chiˆe`u, mˆo.t phˆa`n quan tro.ng khˆong thˆe˙’ thiˆe´u d¯u.o c s˜e d¯u.o cd¯ˆe` cˆa.p trong mˆo.t gi´ao tr`ınh kh´ac) D- ˆe˙’ c´o mˆo.t khung ca˙’nh to`an diˆe.n v`a sˆau sˇa´c vˆe` nh˜u.ngnguyˆen l´y v`a thu c h`anh cu˙’a d¯ˆo` ho.a m´ay t´ınh, xem c´ac t`ai liˆe.u dˆa˜n [9] v`a [11] C´ac phu.o.ngph´ap phˆan t´ıch v`a thiˆe´t kˆe´ c´ac thuˆa.t to´an trong gi´ao tr`ınh cho ph´ep sinh viˆen c´o thˆe˙’ viˆe´tdˆe˜ d`ang c´ac chu.o.ng tr`ınh minh ho.a Gi´ao tr`ınh d¯u.o c biˆen soa.n cho c´ac d¯ˆo´i tu.o ng l`a sinhviˆen To´an-Tin v`a Tin ho.c

Gi´ao tr`ınh su.˙’ du.ng ngˆon ng˜u C d¯ˆe˙’ minh ho.a, tuy nhiˆen c´o thˆe˙’ dˆe˜ d`ang chuyˆe˙’n d¯ˆo˙’isang c´ac ngˆon ng˜u kh´ac; v`a do d¯´o, sinh viˆen cˆa` n c´o mˆo.t sˆo´ kiˆe´n th´u.c vˆe` ngˆon ng˜u C Ngo`ai

ra, hˆa` u hˆe´t c´ac chu.o.ng tr`ınh thao t´ac trˆen cˆa´u tr´uc d˜u liˆe.u nhu danh s´ach liˆen kˆe´t, nˆen d¯`oiho˙’i sinh viˆen pha˙’i c´o nh˜u.ng k˜y nˇang lˆa.p tr`ınh tˆo´t

Sinh viˆen c˜ung cˆa` n c´o co so.˙’ to´an ho.c cu˙’a nh˜u.ng nˇam d¯ˆa`u d¯a.i ho.c: hiˆe˙’u biˆe´t vˆe` d¯a.i sˆo´tuyˆe´n t´ınh v`a h`ınh ho.c gia˙’i t´ıch, ph´ep t´ınh vi t´ıch phˆan

Mu.c d¯´ıch cu˙’a gi´ao tr`ınh l`a, o.˙’ m´u.c d¯ˆo n`ao d¯´o, cho thˆa´y c´ac tr`ınh ´u.ng du.ng d¯ˆo` ho.ad¯u.o c ta.o ra nhu thˆe´ n`ao: Ch´ung ta cˆa`n viˆe´t v`a cha.y thu.˙’ c´ac chu.o.ng tr`ınh Mˆo.t trongnh˜u.ng mu.c d¯´ıch ch´ınh cu˙’a gi´ao tr`ınh l`a gi´up sinh viˆen nˇa´m v˜u.ng c´ac phu.o.ng ph´ap, tru.´o.chˆe´t to´an ho.c ho´a c´ac kh´ac niˆe.m h`ınh ho.c v`a sau d¯´o chuyˆe˙’n ta˙’i th`anh c´ac d¯oa.n m˜a chu.o.ngtr`ınh

Trang 9

Gi´ao tr`ınh bao gˆo`m bˆo´n chu.o.ng v`a mˆo.t phˆa`n phu lu.c v´o.i nh˜u.ng nˆo.i dung ch´ınh nhu.sau:

• Chu.o.ng th´u nhˆa´t d¯ˆe` cˆa.p d¯ˆe´n c´ac phu.o.ng ph´ap v˜e c´ac “nguyˆen so.” cu˙’a d¯ˆo` ho.a m´ayt´ınh: d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse

• Phˆan t´ıch v`a thiˆe´t kˆe´ bˇa`ng h`ınh ho.c l`a nˆo.i dung ch´ınh cu˙’a Chu.o.ng 2 Hˆa`u hˆe´t c´ac

phˆa` n mˆe` m d¯ˆo` ho.a d¯ˆe`u c´o nh˜u.ng ch´u.c nˇang ta.o ra c´ac d¯u.`o.ng cong du a trˆen c´ac d¯iˆe˙’mm`a ngu.`o.i su.˙’ du.ng lu a cho.n Chu.o.ng n`ay cung cˆa´p nh˜u.ng nguyˆen l´y v`a c´ach tiˆe´p cˆa.nthu c h`anh m`a c´ac tr`ınh ´u.ng du.ng d¯ˆo` ho.a ´ap du.ng

• Chu.o.ng 3 gia˙’i quyˆe´t b`ai to´an x´ac d¯i.nh giao cu˙’a nh˜u.ng nguyˆen so d¯ˆo` ho.a: Giao hai

d¯oa.n thˇa˙’ng, giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆo`i (bao h`am c´ac h`ınh ch˜u nhˆa.t) v`a giaocu˙’a hai d¯a gi´ac Cuˆo´i chu.o.ng l`a mˆo.t v´ı du cu˙’a k˜y thuˆa.t “ray tracing” hai chiˆe` u:Chuyˆe˙’n d¯ˆo.ng cu˙’a tia s´ang trong buˆo`ng k´ın c´o ch´u.a c´ac “chu.´o.ng nga.i vˆa.t”

• Chu.o.ng 4 d¯ˆe` cˆa.p d¯ˆe´n nh˜u.ng thuˆa.t to´an tˆo m`au v`ung bˆa´t k`y: V`ung d¯i.nh ngh˜ıa bo.˙’iphˆa` n trong, bo.˙’i d¯u.`o.ng biˆen v`a v`ung l`a d¯a gi´ac

• Phˆa` n phu lu.c l`a thu viˆe.n c´ac cˆa´u tr´uc d˜u liˆe.u v`a c´ac h`am cˆa`n thiˆe´t v`a thu.`o.ng xuyˆensu.˙’ du.ng trong gi´ao tr`ınh

Trong lˆa` n xuˆa´t ba˙’n th´u hai n`ay, ch´ung tˆoi d¯u.a thˆem c´ac v´ı du t´ınh to´an nhˇa`m minhho.a cho phˆa`n l´y thuyˆe´t c˜ung nhu gi´up sinh viˆen nˇa´m v˜u.ng kiˆe´n th´u.c d¯˜a ho.c Ngo`ai ra, c´aclˆo˜i trong xuˆa´t ba˙’n lˆa` n tru.´o.c c˜ung d¯˜a d¯u.o c chı˙’nh l´y; mˇa.c d`u vˆa.y, t´ac gia˙’ vˆa˜n mong c´o nh˜u.ngd¯´ong g´op t`u ba.n d¯o.c

Tˆoi xin ca˙’m o.n nh˜u.ng gi´up d¯˜o d¯˜a nhˆa.n d¯u.o c t`u nhiˆe` u ngu.`o.i m`a khˆong thˆe˙’ liˆe.t kˆehˆe´t, d¯ˇa.c biˆe.t l`a c´ac ba.n sinh viˆen, trong qu´a tr`ınh biˆen soa.n gi´ao tr`ınh n`ay

D- `a La.t, ng`ay 10 th´ang 1 nˇam 2005

PHA.M Tiˆe´n So.n

Trang 10

Chu.o.ng 1

Chu.o.ng n`ay tr`ınh b`ay c´ac thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse trˆen latticenguyˆen Z2 C´ac thuˆa.t to´an chı˙’ thao t´ac trˆen nh˜u.ng sˆo´ nguyˆen v`a trong c´ac v`ong lˇa.p chı˙’ su.˙’

du.ng ph´ep to´an cˆo.ng nˆen rˆa´t hiˆe.u qua˙’

Thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng x´ac d¯i.nh to.a d¯ˆo cu˙’a c´ac pixel nˇa`m trˆen hoˇa.c gˆa`n v´o.i d¯oa.n thˇa˙’ngthu c tˆe´ nhˆa´t Vˆe` nguyˆen tˇa´c, ch´ung ta muˆo´n cho.n d˜ay c´ac pixel gˆa`n v´o.i d¯oa.n thˇa˙’ng thu c tˆe´nhˆa´t v`a thˇa˙’ng nhˆa´t X´et d¯oa.n thˇa˙’ng thu c tˆe´ d¯u.o c xˆa´p xı˙’ v´o.i mˆa.t d¯ˆo mˆo.t pixel; ta cˆa`n c´o

nh˜u.ng t´ınh chˆa´t g`ı? V´o.i c´ac d¯oa.n thˇa˙’ng c´o hˆe sˆo´ g´oc thuˆo.c d¯oa.n [−1, 1], c´o d¯´ung mˆo.t pixel

d¯u.o c v˜e lˆen trˆen mˆo˜i cˆo.t; v´o.i c´ac d¯oa.n thˇa˙’ng m`a hˆe sˆo´ g´oc nˇa`m ngo`ai d¯oa.n n`ay, c´o d¯´ungmˆo.t pixel d¯u.o c v˜e trˆen mˆo˜i h`ang Tˆa´t ca˙’ c´ac d¯oa.n thˇa˙’ng d¯u.o c v˜e v´o.i c`ung mˆo.t d¯ˆo s´ang,khˆong phu thuˆo.c v`ao d¯ˆo d`ai v`a hu.´o.ng, v`a nhanh nhˆa´t c´o thˆe˙’ d¯u.o c Thuˆa.t to´an v˜e d¯oa.nthˇa˙’ng c˜ung cˆa` n ch´u ´y d¯ˆe´n c´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng nhu d¯ˆo rˆo.ng, kiˆe˙’u v˜e Thˆa.m ch´ıch´ung ta muˆo´n cu c tiˆe˙’u ho´a m´u.c d¯ˆo rˇang cu.a do tiˆe´n tr`ınh r`o.i ra.c ho´a d¯u.`o.ng thˇa˙’ng thu ctˆe´ nh`o su.˙’ du.ng k˜y thuˆa.t antialiasing (xem [9], [11]) bˇa`ng c´ach ´ap du.ng kha˙’ nˇang d¯ˇa.t cu.`o.ngd¯ˆo cu˙’a mˆo˜i pixel trˆen c´ac thiˆe´t bi hiˆe˙’n thi m`a mˆo.t pixel tu.o.ng ´u.ng nhiˆe` u bit

Tru.´o.c hˆe´t ch´ung ta chı˙’ d¯ˆe` cˆa.p d¯ˆe´n c´ac d¯oa.n thˇa˙’ng d¯ˆo rˆo.ng mˆo.t pixel v`a c´o d¯´ung mˆo.tpixel trˆen mˆo˜i cˆo.t (hoˇa.c h`ang d¯ˆo´i v´o.i c´ac d¯oa.n thˇa˙’ng dˆo´c) Phˆa`n cuˆo´i chu.o.ng s˜e d¯ˆe` cˆa.p

Trang 11

d¯ˆe´n d¯ˆo rˆo.ng c´ac nguyˆen so v`a c´ac mˆa˜u v˜e.

Mˆo.t c´ach h`ınh ho.c, ch´ung ta biˆe˙’u diˆe˜n mˆo.t pixel nhu mˆo.t chˆa´m tr`on v´o.i tˆam ta.i vi

tr´ı (x, y) cu˙’a pixel trˆen lu.´o.i c´ac to.a d¯ˆo nguyˆen Z2 Biˆe˙’u diˆe˜n n`ay l`a mˆo.t xˆa´p xı˙’ th´ıch ho p

nh´at cˇa´t ngang trong mˆo.t chu k`y cu˙’a ch`um tia electron cu˙’a CRT; xˆa´p xı˙’ n`ay phu thuˆo.c v`ao khoa˙’ng c´ach (tu`y thuˆo.c v`ao hˆe thˆo´ng) gi˜u.a c´ac vˆe´t trˆen m`an h`ınh hiˆe˙’n thi Trong mˆo.t sˆo´ hˆe thˆo´ng, c´ac chˆa´m kˆe` nhau phu˙’ lˆa´p mˆo.t phˆa`n lˆen nhau; v´o.i nh˜u.ng hˆe thˆo´ng kh´ac c´o nh˜u.ng khoa˙’ng c´ach gi˜u.a c´ac pixel d¯´u.ng kˆe` nhau; trong hˆa` u hˆe´t c´ac hˆe thˆo´ng, khoa˙’ng c´ach theo chiˆe` u ngang nho˙’ ho.n theo chiˆe` u d¯´u.ng Mˆo.t kh´ac biˆe.t n˜u.a tu`y theo hˆe thˆo´ng trong viˆe.c biˆe˙’u diˆe˜n hˆe to.a d¯ˆo., chˇa˙’ng ha.n Macintosh xem c´ac pixel d¯u.o c d¯ˇa.t ta.i tˆam cu˙’a h`ınh ch˜u nhˆa.t gi˜u.a c´ac d¯u.`o.ng thˇa˙’ng kˆe` nhau cu˙’a lu.´o.i d¯iˆe` u khiˆe˙’n thay cho nˇa`m trˆen c´ac d¯u.`o.ng thˇa˙’ng cu˙’a lu.´o.i Theo c´ach n`ay, c´ac h`ınh ch˜u nhˆa.t (x´ac d¯i.nh bo.˙’i hai g´oc) gˆo`m c´ac pixel thuˆo.c phˆa`n trong cu˙’a n´o D- i.nh ngh˜ıa n`ay cho ph´ep c´ac v`ung d¯ˆo rˆo.ng bˇa`ng khˆong: H`ınh ch˜u nhˆa.t t`u

(x, y) d¯ˆe´n (x, y) khˆong ch´u.a pixel n`ao, trong khi v´o.i nh˜u.ng hˆe thˆo´ng kh´ac, c´o d¯´ung mˆo.t

pixel ta.i d¯iˆe˙’m n`ay Du.´o.i d¯ˆay ch´ung ta s˜e biˆe˙’u diˆe˜n c´ac pixel nhu c´ac h`ınh tr`on r`o.i nhau c´o tˆam nˇa`m trˆen lu.´o.i

H`ınh 1.1 l`a ph´ong to cu˙’a d¯u.`o.ng thˇa˙’ng thu c tˆe´ v`a xˆa´p xı˙’ d¯ˆo rˆo.ng mˆo.t pixel cu˙’a n´o C´ac pixel d¯u.o c v˜e tu.o.ng ´u.ng c´ac h`ınh tr`on m`au d¯en v`a c´ac pixel khˆong d¯u.o c v˜e tu.o.ng ´u.ng h`ınh tr`on khˆong tˆo Trˆen m`an h`ınh thu c tˆe´, d¯u.`o.ng k´ınh cu˙’a h`ınh tr`on biˆe˙’u diˆe˜n pixel l´o.n ho.n khoa˙’ng c´ach gi˜u.a c´ac pixel kˆe` nhau, bo.˙’i vˆa.y biˆe˙’u diˆe˜n bˇa`ng k´y hiˆe.u cu˙’a ch´ung ta l`a mˆo.t ph´ong d¯a.i m´u.c d¯ˆo r`o.i ra.c cu˙’a c´ac pixel

i i i i i i i i i i i i i i i i i i i i

y y

y y

H`ınh 1.1: D- oa.n thˇa˙’ng xˆa´p xı˙’ d¯u.o c biˆe˙’u diˆe˜n bo.˙’i c´ac h`ınh tr`on d¯en

V`ı c´ac nguyˆen so trong hˆe thˆo´ng ch´ung ta x´ac d¯i.nh trˆen lu.´o.i d¯iˆe` u khiˆe˙’n nguyˆen nˆen c´ac to.a d¯ˆo d¯ˆa`u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng l`a nguyˆen Thˆa.t ra, nˆe´u ch´ung ta cˇa´t d¯oa.n thˇa˙’ng v´o.i h`ınh ch˜u nhˆa.t tru.´o.c khi hiˆe˙’n thi n´o th`ı to.a d¯ˆo c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng c´o thˆe˙’ khˆong nguyˆen (Ch´ung ta s˜e tha˙’o luˆa.n c´ac giao d¯iˆe˙’m khˆong nguyˆen trong Phˆa`n 1.1.3) Gia˙’

Trang 12

su.˙’ d¯oa.n thˇa˙’ng c´o hˆe sˆo´ g´oc |m| ≤ 1; c´ac tru.`o.ng ho p kh´ac d¯u.o c xu.˙’ l´y tu.o.ng tu Ho.n n˜u.a tru.`o.ng ho p c´ac d¯oa.n thˇa˙’ng ngang, d¯´u.ng hoˇa.c c´o hˆe sˆo´ g´oc ±1 l`a tˆa`m thu.`o.ng v`ı ch´ung chı˙’

d¯i qua c´ac pixel trˆen lu.´o.i

1.1.1 Thuˆ a.t to´an sˆo´ gia

X´et hai pixel A = (x A , y A ) v`a B = (x B , y B) (t´uc c´ac phˆa` n tu.˙’ cu˙’a lattice nguyˆen Z2) Phu.o.ng tr`ınh d¯u.`o.ng thˇa˙’ng AB c´o da.ng y = mx + t, trong d¯´o hˆe sˆo´ g´oc m = dy/dx v`a t = y A − mx A

C´ach d¯o.n gia˙’n nhˆa´t d¯ˆe˙’ v˜e d¯oa.n thˇa˙’ng AB l`a:

1 T´ınh hˆe sˆo´ g´oc m;

2 Tˇang x mˆo.t d¯o.n vi (kho.˙’i d¯ˆa`u t`u d¯iˆe˙’m bˆen tr´ai nhˆa´t), v´o.i mˆo˜i x i t´ınh y i = mx i + t v`a sau d¯´o v˜e pixel ta.i (x i , by i + 0.5c)1

Theo c´ach n`ay ta cho.n pixel tˆo´t nhˆa´t, t´u.c l`a pixel m`a khoa˙’ng c´ach d¯ˆe´n d¯u.`o.ng thˇa˙’ng thu ctˆe´ nho˙’ nhˆa´t Phu.o.ng ph´ap n`ay khˆong hiˆe.u qua˙’ do mˆo˜i bu.´o.c lˇa.p cˆa`n t´ınh mˆo.t ph´ep nhˆan,mˆo.t ph´ep cˆo.ng v`a mˆo.t ph´ep to´an l`am tr`on Ta c´o thˆe˙’ khu.˙’ ph´ep nhˆan bˇa`ng c´ach ch´u ´y rˇa`ng

y i+1 = mx i+1 + t

= m(x i + ∆x) + t

= y i + m∆x, v`a nˆe´u bu.´o.c tˇang ∆x = 1 th`ı y i+1 = y i + m.

Do d¯´o nˆe´u x tˇang mˆo.t d¯o.n vi th`ı y tˇang m d¯o.n vi V´o.i mo.i d¯iˆe˙’m (x i , y i) trˆen d¯oa.n

thˇa˙’ng ta biˆe´t rˇa`ng nˆe´u x i+1 = x i + 1 th`ı y i+1 = y i + m; t´u.c l`a, c´ac gi´a tri x v`a y d¯u.o c t´ınh

theo c´ac gi´a tri tru.´o.c d¯´o cu˙’a n´o (xem H`ınh 1.2) D- ˆay ch´ınh l`a “thuˆa.t to´an sˆo´ gia”: v´o.i mˆo˜ibu.´o.c lˇa.p ta thu c hiˆe.n c´ac ph´ep to´an sˆo´ gia du a trˆen bu.´o.c tru.´o.c

Kho.˙’i ta.o ta g´an (x0, y0) l`a to.a d¯ˆo nguyˆen cu˙’a d¯iˆe˙’m xuˆa´t ph´at, chˇa˙’ng ha.n A Ch´u ´y rˇa`ng trong tru.`o.ng ho p |m| > 1 nˆe´u x tˇang mˆo.t d¯o.n vi th`ı y tˇang ho.n mˆo.t d¯o.n vi Do d¯´o

cˆa` n ho´an d¯ˆo˙’i vai tr`o cu˙’a x v`a y bˇa`ng c´ach g´an bu.´o.c tˇang mˆo.t d¯o.n vi cho y v`a tˇang x mˆo.t lu.o ng ∆x = ∆y m = 1

m

1K´y hiˆe.u [x], bxc v`a dxe tu.o.ng ´u.ng l`a phˆa`n nguyˆen, l`am tr`on xuˆo´ng v`a l`am tr`on lˆen cu˙’a x.

Trang 13

(x i , y i)

(x i , by i c)

.

(x i + 1, y i + m)

(x i + 1, dy i + me)

D- u.`o.ng thˇa˙’ng thu c tˆe´

w

w w

w

H`ınh 1.2: T´ınh to´an sˆo´ gia cu˙’a (x i , y i ).

V´ı du 1.1.1 Gia˙’ su.˙’ A(2, 0), B(9, 3) Khi d¯´o d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A v`a B c´o hˆe sˆo´ g´oc m = 3

7 ∈ (0, 1) ´Ap du.ng thuˆa.t to´an sˆo´ gia ta d¯u.o c d˜ay c´ac d¯iˆe˙’m v˜e tˆo´t nhˆa´t nhu trong ba˙’ng du.´o.i:

i x i y i by i + 0.5c

7 0

7 1

7 1

7 2

7 2

7 3

7 3

Thu˙’ tu.c Line() du.´o.i d¯ˆay minh ho.a thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng t`u (x0, y0) d¯ˆe´n (x1, y1)

v´o.i gi´a tri m`au V alue D- iˆe˙’m kho.˙’i d¯ˆa`u l`a d¯iˆe˙’m bˆen tr´ai nhˆa´t Ngo`ai ra ta chı˙’ x´et tru.`o.ng ho p

−1 ≤ m ≤ 1 v`ı c´ac tru.`o.ng ho p kh´ac c´o thˆe˙’ thu c hiˆe.n do t´ınh d¯ˆo´i x´u.ng Ho.n n˜u.a, ch´ung ta

c˜ung bo˙’ qua viˆe.c kiˆe˙’m tra c´ac tru.`o.ng ho p d¯ˇa.c biˆe.t: d¯u.`o.ng thˇa˙’ng nˇa`m ngang, d¯´u.ng, xiˆen

mˆo.t g´oc ±450 Ch´u ´y rˇa`ng, trong ngˆon ng˜u C, (int)y bˇa`ng by + 0.5c.

void Line(int x_A, int y_A, int x_B, int y_B, int Value)

{

Trang 14

1.1.2 Thuˆ a.t to´an d¯iˆe˙’m gi˜u.a

Thu˙’ tu.c Line() thao t´ac trˆen c´ac sˆo´ thu c y v`a m Bresenham d¯˜a xˆay du ng thuˆa.t to´an [2] v˜e

d¯oa.n thˇa˙’ng chı˙’ su.˙’ du.ng c´ac ph´ep to´an trˆen sˆo´ nguyˆen do d¯´o tr´anh go.i h`am l`am tr`on v`a cho

ph´ep x´ac d¯i.nh (x i+1 , y i+1 ) theo sˆo´ gia du a trˆen nh˜u.ng gi´a tri o.˙’ bu.´o.c tru.´o.c (x i , y i ) Thuˆa.t

to´an n`ay c´o thˆe˙’ mo.˙’ rˆo.ng da.ng dˆa´u chˆa´m d¯ˆo.ng d¯ˆo´i v´o.i c´ac to.a d¯ˆo thu c Ho.n n˜u.a, phu.o.ngph´ap cu˙’a Bresenham c´o thˆe˙’ d¯u.o c ´ap du.ng t´ınh to´an trˆen sˆo´ nguyˆen v˜e d¯u.`o.ng tr`on mˇa.c d`un´o khˆong dˆe˜ d`ang mo.˙’ rˆo.ng cho conic tu`y ´y V`ı vˆa.y ch´ung ta su.˙’ du.ng phu.o.ng ph´ap tu.o.ng

d¯ˆo´i kh´ac, thuˆa.t to´an d¯iˆe˙’m gi˜u.a, d¯u.o c cˆong bˆo´ lˆa`n d¯ˆa`u tiˆen bo.˙’i Pitteway [16], [17] v`a d¯u.o c

ca˙’i tiˆe´n bo.˙’i Van Aken [26] v`a mˆo.t sˆo´ t´ac gia˙’ kh´ac [28], [29] Van Aken d¯˜a chı˙’ ra [26] d¯ˆo´i v´o.ic´ac d¯u.`o.ng thˇa˙’ng v`a d¯u.`o.ng tr`on v´o.i d˜u liˆe.u nguyˆen, cˆong th´u.c d¯iˆe˙’m gi˜u.a suy ra cˆong th´u.ccu˙’a Bresenham v`a do d¯´o sinh ra c`ung d˜ay c´ac pixel

Khˆong mˆa´t t´ınh tˆo˙’ng qu´at, gia˙’ su.˙’ hˆe sˆo´ g´oc m cu˙’a d¯u.`o.ng thˇa˙’ng thuˆo.c khoa˙’ng (0, 1)

(c´ac tru.`o.ng ho p kh´ac c´o thˆe˙’ d¯u.o c xu.˙’ l´y bo.˙’i c´ac ph´ep lˆa´y d¯ˆo´i x´u.ng mˆo.t c´ach th´ıch ho p qua

c´ac tru.c to.a d¯ˆo.) Ta c˜ung k´y hiˆe.u d¯iˆe˙’m xuˆa´t ph´at l`a (x A , y A ) v`a d¯iˆe˙’m kˆe´t th´uc l`a (x B , y B ).

D- ˇa.t dy := y B − y A , dx = x B − x A Phu.o.ng tr`ınh d¯u.`o.ng thˇa˙’ng l qua hai d¯iˆe˙’m A v`a B x´ac

d¯i.nh bo.˙’i

y = dy

dx x + t;

Trang 15

(l −) (l+) M Q w C w R w D l H`ınh 1.3: Lu.´o.i c´ac pixel v`a vi tr´ı d¯iˆe˙’m C, R, D, Q v`a M. hay tu.o.ng d¯u.o.ng f (x, y) := ax + by + c = 0, trong d¯´o a = dy, b = −dx, v`a c = b × dx K´y hiˆe.u c´ac nu.˙’a mˇa.t phˇa˙’ng ngo`ai v`a nu.˙’a mˇa.t phˇa˙’ng trong x´ac d¯i.nh bo.˙’i l tu.o.ng ´u.ng bo.˙’i (l+) := {(x, y) ∈ R2 | f (x, y) > 0}, (l − ) := {(x, y) ∈ R2 | f (x, y) < 0}. ´ Y tu.o.˙’ng cu˙’a thuˆa.t to´an d¯iˆe˙’m gi˜u.a l`a xˆay du ng mˆo.t d˜ay c´ac d¯iˆe˙’m v˜e “tˆo´t nhˆa´t” (x i , y i) bˇa´t d¯ˆa` u t`u d¯iˆe˙’m (x0, y0) = (x A , y A ) Kh´ai niˆe.m tˆo´t nhˆa´t o.˙’ d¯ˆay l`a nh˜u.ng d¯iˆe˙’m (x i , y i) d¯u.o c cho.n gˆa`n v´o.i d¯u.`o.ng thˇa˙’ng thu c tˆe´ (da.ng liˆen tu.c) nhˆa´t Theo gia˙’ thiˆe´t, 0 < m < 1, nˆen khi x tˇang mˆo.t lu.o ng ∆x th`ı y tˇang khˆong qu´a ∆y = m∆x d¯o.n vi

V`ı vˆa.y nˆe´u bu.´o.c th´u i cho.n d¯u.o c d¯iˆe˙’m v˜e tˆo´t nhˆa´t C := (x i , y i ) th`ı o.˙’ bu.´o.c th´u i + 1

ta s˜e cho.n d¯iˆe˙’m v˜e (x i+1 , y i+1 ), trong d¯´o x i+1 = x i + 1 v`a y i+1 = y i hoˇa.c y i+1 = y i + 1 N´oi c´ach kh´ac, bu.´o.c th´u i + 1 ch´ung ta s˜e cho.n mˆo.t trong hai pixel R := (x i + 1, y i) hoˇa.c

D := (x i + 1, y i + 1) (xem H`ınh 1.3) K´y hiˆe.u Q l`a giao d¯iˆe˙’m cu˙’a hai d¯u.`o.ng thˇa˙’ng l v`a

x = x i + 1 Theo Bresenham, dˆa´u cu˙’a biˆe˙’u th´u.c x´ac d¯i.nh bo.˙’i hiˆe.u gi˜u.a hai khoa˙’ng c´ach t`u.

R v`a D d¯ˆe´n Q cho ph´ep x´ac d¯i.nh pixel tˆo´t nhˆa´t o.˙’ bu.´o.c i + 1 Trong thuˆa.t to´an d¯iˆe˙’m gi˜u.a,

ta quan s´at vi tr´ı cu˙’a d¯iˆe˙’m gi˜u.a M v`a c´ac nu.˙’a mˇa.t phˇa˙’ng x´ac d¯i.nh bo.˙’i d¯u.`o.ng thˇa˙’ng l Dˆe˜ d`ang chı˙’ ra rˇa`ng, nˆe´u M ∈ (l+) th`ı pixel D gˆa ` n v´o.i d¯u.`o.ng thˇa˙’ng l ho.n; nˆe´u M ∈ (l −) th`ı

pixel R gˆa` n ho.n D- u.`o.ng thˇa˙’ng l c´o thˆe˙’ d¯i ngang qua M; hoˇa.c ca˙’ hai pixel nˇa`m vˆe` c`ung mˆo.t nu.˙’a mˇa.t phˇa˙’ng (l+) (hoˇa.c (l −)) nhu.ng trong bˆa´t c´u tru.`o.ng ho p n`ao, ta vˆa˜n cho.n d¯iˆe˙’m gˆa` n v´o.i l nhˆa´t Ho.n n˜u.a, sai sˆo´-t´u.c l`a khoa˙’ng c´ach gi˜u.a pixel d¯u.o c cho.n v`a d¯u.`o.ng thˇa˙’ng thu c tˆe´ l-luˆon luˆon nho˙’ ho.n hoˇa.c bˇa`ng 1/2.

Trang 16

D- ˆe˙’ ´ap du.ng thuˆa.t to´an d¯iˆe˙’m gi˜u.a, chı˙’ cˆa`n t´ınh f(M) = f(x i + 1, y i+ 1

2) v`a kiˆe˙’m tra

dˆa´u cu˙’a n´o Do d¯´o ta d¯i.nh ngh˜ıa biˆe´n quyˆe´t d¯i.nh

1 Nˆe´u d i > 0 cho.n pixel D;

2 Nˆe´u d i < 0 cho.n pixel R;

3 Nˆe´u d i = 0 cho.n mˆo.t trong hai pixel R hoˇa.c D, do d¯´o cho.n R.

Kˆe´ tiˆe´p ta cˆa` n x´ac d¯i.nh to.a d¯ˆo d¯iˆe˙’m gi˜u.a M v`a do d¯´o biˆe´n quyˆe´t d¯i.nh d i+1 o.˙’ bu.´o.c i + 1;

d˜ı nhiˆen d¯iˆe` u n`ay phu thuˆo.c v`ao viˆe.c cho.n pixel R hoˇa.c D Nˆe´u cho.n R th`ı ho`anh d¯ˆo d¯iˆe˙’m

M tˇang mˆo.t d¯o.n vi v`a tung d¯ˆo khˆong d¯ˆo˙’i Do d¯´o

K´y hiˆe.u sˆo´ gia d¯u.o c cˆo.ng thˆem khi R d¯u.o c cho.n l`a ∆ R := a = dy N´oi c´ach kh´ac, ta

c´o thˆe˙’ suy ra biˆe´n quyˆe´t d¯i.nh o.˙’ bu.´o.c kˆe´ tiˆe´p t`u biˆe´n quyˆe´t d¯i.nh o.˙’ bu.´o.c hiˆe.n h`anh bˇa`ngc´ach cˆo.ng thˆem sˆo´ gia ∆R m`a khˆong cˆa` n pha˙’i t´ınh la.i gi´a tri f(M).

Nˆe´u cho.n D th`ı ho`anh d¯ˆo v`a tung d¯ˆo d¯iˆe˙’m M c`ung tˇang mˆo.t d¯o.n vi., nˆen

K´y hiˆe.u sˆo´ gia d¯u.o c cˆo.ng v`ao d i+1 sau khi cho.n D l`a ∆ D := a + b = dy − dx.

V`ı o.˙’ bu.´o.c d¯ˆa` u tiˆen, ta cho.n (x0, y0) = (x A , y A) nˆen c´o thˆe˙’ t´ınh tru c tiˆe´p gi´a tri kho.˙’i

ta.o d0 Thˆa.t vˆa.y, d¯iˆe˙’m gi˜u.a d¯ˆa`u tiˆen c´o to.a d¯ˆo (x0+ 1, y0 +1

Trang 17

Nhu.ng (x0, y0) thuˆo.c d¯u.`o.ng thˇa˙’ng l nˆen f(x0, y0) = 0; do d¯´o gi´a tri kho.˙’i d¯ˆa`u cu˙’a biˆe´n

quyˆe´t d¯i.nh l`a d0 = a + b/2 = dy − dx/2 Su.˙’ du.ng d0 ta c´o thˆe˙’ cho.n pixel th´u hai, th´u

ba, v.v D- ˆe˙’ khu.˙’ mˆa˜u sˆo´ trong d0 ta d¯i.nh ngh˜ıa la.i h`am f bˇa`ng c´ach nhˆan n´o cho 2; t´u.c l`a

f (x, y) = 2(ax + by + c) N´oi c´ach kh´ac, nhˆan 2 cho c´ac hˇa`ng sˆo´ a, b, c v`a biˆe´n quyˆe´t d¯i.nh;

m`a d¯iˆe` u n`ay khˆong a˙’nh hu.o.˙’ng d¯ˆe´n dˆa´u cu˙’a biˆe´n quyˆe´t d¯i.nh

Tˆo˙’ng qu´at ho´a thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯oa.n thˇa˙’ng AB (trong tru.`o.ng ho p x A < x B

v`a 0 < m < 1) nhu sau:

1 [Kho.˙’i ta.o] D- ˇa.t dx = x B − x A , dy = y B − y A , d0 = 2dy − dx, ∆ R = 2dy, ∆ D = 2(dy −

dx), x0 = x A , y0 = y A

2 Gia˙’ su.˙’ o.˙’ bu.´o.c th´u i ta c´o d¯iˆe˙’m v˜e tˆo´t nhˆa´t (x i , y i ) v`a biˆe´n quyˆe´t d¯i.nh d i

3 [V˜e pixel hiˆe.n h`anh] D- ˇa.t d¯iˆe˙’m v˜e ta.i (x i , y i ).

4 [Cˆa.p nhˆa.t] Nˆe´u x i = x B , thuˆa.t to´an d`u.ng; ngu.o c la.i, d¯ˇa.t

d i+ ∆D nˆe´u ngu.o c la.i

5 Thay i bˇa`ng (i + 1) v`a lˇa.p la.i Bu.´o.c 3.

V´ı du 1.1.2 Gia˙’ su.˙’ A(2, 0), B(9, 3) Khi d¯´o d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A v`a B c´o hˆe sˆo´ g´oc m = 3

7 ∈ (0, 1) Dˆe˜ d`ang kiˆe˙’m tra rˇa`ng

Trang 18

void MidPointLine(int x_A, int y_A, int x_B, int y_B, int Value)

Trang 19

}

}

}

1.1.3 Mˆ o.t sˆo´ vˆa´n d¯ˆe ` liˆen quan d¯ˆe´n thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng

Th´u tu. cu˙’a c´ac d¯iˆe˙’m d¯ˆ` u cuˆo´i Trong mˆo.t ´u.ng du.ng ta cˆa`n d¯`oi ho˙’i mˆo.t d¯oa.n thˇa˙’nga

d¯u.o c v˜e t`u A d¯ˆe´n B ch´u.a c`ung tˆa.p c´ac pixel nhu d¯oa.n thˇa˙’ng d¯u.o c v˜e t`u B d¯ˆe´n A; n´oi

c´ach kh´ac, d¯oa.n thˇa˙’ng d¯u.o c v˜e khˆong phu thuˆo.c v`ao th´u tu c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i Su sai kh´acchı˙’ c´o thˆe˙’ xa˙’y ra ta.i nh˜u.ng d¯iˆe˙’m v˜e m`a d¯u.`o.ng thˇa˙’ng d¯i qua d¯iˆe˙’m gi˜u.a v`a biˆe´n quyˆe´t d¯i.nh

bˇa`ng khˆong; trong tru.`o.ng ho p n`ay, d¯i t`u tr´ai sang pha˙’i ch´ung ta cho.n d¯iˆe˙’m v˜e R Do t´ınh d¯ˆo´i x´u.ng, khi d¯i t`u pha˙’i sang tr´ai v`a d = 0 l˜e ra ta cho.n d¯iˆe˙’m v˜e R, nhu.ng cho.n lu a n`ay s˜e sai lˆe.ch mˆo.t d¯o.n vi theo th`anh phˆa`n y v´o.i pixel d¯u.o c cho.n khi d¯i t`u tr´ai sang pha˙’i Do d¯´o

ch´ung ta cˆa` n cho.n pixel D khi d¯i t`u pha˙’i sang tr´ai trong tru.`o.ng ho p d = 0 L´y luˆa.n tu.o.ng

tu d¯ˆo´i v´o.i c´ac d¯oa.n thˇa˙’ng c´o hˆe sˆo´ g´oc bˆa´t k`y

Phu.o.ng ph´ap ho´an d¯ˆo˙’i c´ac d¯iˆe˙’m d¯ˆa` u cuˆo´i cu˙’a d¯oa.n thˇa˙’ng d¯ˆe˙’ thuˆa.t to´an xu.˙’ l´y theoc`ung hu.´o.ng khˆong thu c hiˆe.n ch´ınh x´ac khi ch´ung ta v˜e c´ac d¯oa.n thˇa˙’ng theo mˆa˜u tˆo C´acd¯oa.n thˇa˙’ng v˜e theo mˆa˜u thu.`o.ng “neo” nh˜u.ng dˆa´u hiˆe.u ta.i d¯iˆe˙’m xuˆa´t ph´at, c´o thˆe˙’ l`a d¯iˆe˙’mdu.´o.i bˆen tr´ai, khˆong phu thuˆo.c v`ao hu.´o.ng di chuyˆe˙’n D- ˇa.c biˆe.t, v´o.i mˆa˜u tˆo chˆa´m-ga.ch,chˇa˙’ng ha.n 111100, ch´ung ta muˆo´n v˜e mˆa˜u n`ay ta.i d¯iˆe˙’m xuˆa´t ph´at m`a khˆong tu d¯ˆo.ng d¯ˆo˙’ith`anh d¯iˆe˙’m du.´o.i bˆen tr´ai Ngo`ai ra, nˆe´u thuˆa.t to´an luˆon luˆon d¯ˇa.t la.i c´ac d¯iˆe˙’m d¯ˆa`u cuˆo´i

theo th´u tu ch´ınh tˇa´c, ta cˆa`n di chuyˆe˙’n t`u tr´ai sang pha˙’i v´o.i d¯oa.n thˇa˙’ng AB v`a t`u pha˙’i sang tr´ai v´o.i d¯oa.n thˇa˙’ng BA; d¯iˆe` u n`ay ta.o ra su gi´an d¯oa.n trong qu´a tr`ınh v˜e, chˇa˙’ng ha.nd¯a gi´ac, ta.i nh˜u.ng d¯ı˙’nh chung

D- iˆe˙’m xuˆa´t ph´at nˇa`m trˆen ca.nh cu˙’a d¯a gi´ac cˇa´t Mˆo.t vˆa´n d¯ˆe` kh´ac ch´ung ta cˆa`nsu.˙’a d¯ˆo˙’i thuˆa.t to´an d¯ˆe˙’ v˜e c´ac d¯oa.n thˇa˙’ng sau khi d¯u.o c cˇa´t bo.˙’i mˆo.t trong c´ac thuˆa.t to´antrong Phˆa` n 3.3 H`ınh 1.4(a) minh ho.a d¯oa.n thˇa˙’ng d¯u.o c cˇa´t bo.˙’i ca.nh bˆen tr´ai, x = xmin,

cu˙’a h`ınh ch˜u nhˆa.t Giao d¯iˆe˙’m cu˙’a d¯oa.n thˇa˙’ng v`a ca.nh bˆen tr´ai c´o ho`anh d¯ˆo x nguyˆen nhu.ng tung d¯ˆo y thu c Pixel (xmin, bmxmin + t + 0.5c) trˆen ca.nh x = xmin ch´ınh l`a pixel

d¯u.o c v˜e ta.i ho`anh d¯ˆo xmin cu˙’a d¯oa.n thˇa˙’ng tru.´o.c khi cˇa´t theo thuˆa.t to´an d¯iˆe˙’m gi˜u.a2 V´o.ipixel kho.˙’i ta.o d¯˜a biˆe´t, kˆe´ tiˆe´p ch´ung ta cˆa`n kho.˙’i ta.o biˆe´n quyˆe´t d¯i.nh ta.i d¯iˆe˙’m gi˜u.a d¯oa.n

RD trong cˆo.t kˆe´ bˆen Cˆa`n ch´u ´y rˇa`ng, c´ach l`am n`ay ta.o ra d˜ay ch´ınh x´ac c´ac pixel, trong

2Khi mxmin+ t nˇa`m gi˜u.a hai d¯u.`o.ng thˇa˙’ng ngang kˆe ` nhau, ch´ung ta cˆa ` n l`am tr`on xuˆo´ng D - ˆay l`a hˆe qua˙’

cu˙’a viˆe.c cho.n pixel R khi d = 0.

Trang 20

x = xmin y = ymin

y i R iDM (xmin, bmxmin+ t + 0.5c)

(xmin, mxmin+ t)

(a)

y = ymin− 1

x = xmin y = ymin

y y y y y y y y i i i i y y y y i i i y y y y

y = ymin 1

(b) H`ınh 1.4: D- iˆe˙’m xuˆa´t ph´at nˇa`m trˆen biˆen h`ınh ch˜u nhˆa.t (a) Giao v´o.i ca.nh d¯´u.ng (b) Giao v´o.i ca.nh ngang

Trang 21

khi cˇa´t d¯u.`o.ng thˇa˙’ng theo d¯u.`o.ng biˆen xmin v`a sau d¯´o thu c hiˆe.n v˜e d¯oa.n thˇa˙’ng d¯u.o c cˇa´t t`u.

(xmin, bmxmin+ t + 0.5c) d¯ˆe´n (x B , y B) theo thuˆa.t to´an d¯iˆe˙’m gi˜u.a s˜e cho d˜ay d¯iˆe˙’m v˜e khˆong

ch´ınh x´ac do d¯u.`o.ng thˇa˙’ng sau khi cˇa´t c´o hˆe sˆo´ g´oc kh´ac m.

Tru.`o.ng ho p ph´u.c ta.p ho.n khi d¯u.`o.ng thˇa˙’ng AB giao v´o.i d¯u.`o.ng thˇa˙’ng nˇa`m ngang nhu trong H`ınh 1.4(b) Khi hˆe sˆo´ g´oc m rˆa´t nho˙’, c´o nhiˆe ` u pixel nˇa`m trˆen d`ong qu´et y = ymin

tu.o.ng ´u.ng ca.nh bˆen du.´o.i cu˙’a h`ınh ch˜u nhˆa.t Ch´ung ta muˆo´n bao h`am c´ac pixel n`ay trong

h`ınh ch˜u nhˆa.t, nhu.ng do qu´a tr`ınh t´ınh to´an giao d¯iˆe˙’m v´o.i d`ong qu´et y = ymin v`a sau d¯´o

l`am tr`on ho`anh d¯ˆo x ta d¯u.o c pixel C khˆong pha˙’i pixel bˆen tr´ai nhˆa´t D trˆen d`ong n`ay Du a trˆen h`ınh v˜e, ta thˆa´y rˇa`ng pixel bˆen tr´ai nhˆa´t D l`a pixel trˆen bˆen pha˙’i giao d¯iˆe˙’m I cu˙’a d¯oa.n thˇa˙’ng AB v`a d¯u.`o.ng thˇa˙’ng y = ymin1

2 Do d¯´o, ta chı˙’ cˆa ` n t`ım I v`a l`am tr`on lˆen ho`anh d¯ˆo.;

pixel d¯ˆa` u tiˆen D ch´ınh l`a (dx I e, ymin).

Cuˆo´i c`ung, thuˆa.t to´an d¯iˆe˙’m gi˜u.a c˜ung thu c hiˆe.n tˆo´t trong tru.`o.ng ho p c´ac d¯iˆe˙’m d¯ˆa`ucuˆo´i c´o to.a d¯ˆo thu c; kh´ac biˆe.t duy nhˆa´t l`a bu.´o.c tˇang v`a c´ac ph´ep to´an thao t´ac trˆen sˆo´thu c

Thay d¯ˆo˙’i cu.`o.ng d¯ˆo s´ang cu˙’a d¯oa.n thˇa˙’ng theo hˆe sˆo´ g´oc X´et hai d¯oa.n thˇa˙’ng trongH`ınh 1.5 D- oa.n thˇa˙’ng l2 c´o hˆe sˆo´ g´oc 1 v`a do d¯´o c´o d¯ˆo d`ai bˇa`ng2 lˆa` n d¯ˆo d`ai cu˙’a l1 Ch´ung

ta d¯ˇa.t c`ung sˆo´ (10) pixel trˆen mˆo˜i d¯oa.n thˇa˙’ng Nˆe´u cu.`o.ng d¯ˆo cu˙’a mˆo˜i pixel l`a I th`ı cu.`o.ng d¯ˆo trˆen mˆo.t d¯o.n vi d¯ˆo d`ai cu˙’a d¯oa.n thˇa˙’ng l1 l`a I, trong khi cu˙’a l2 l`a I/ √2; su khˆong nhˆa´tqu´an n`ay dˆe˜ d`ang ph´at hiˆe.n bo.˙’i ngu.`o.i quan s´at Trˆen m`an h`ınh d¯o.n sˇa´c, khˆong c´o c´ach gia˙’i

quyˆe´t, nhu.ng trˆen hˆe thˆo´ng n-bit trˆen pixel ch´ung ta c´o thˆe˙’ ca˙’i thiˆe.n d¯u.o c t`ınh tra.ng n`ay

bˇa`ng c´ach d¯ˇa.t cu.`o.ng d¯ˆo l`a mˆo.t h`am cu˙’a hˆe sˆo´ g´oc K˜y thuˆa.t antialiasing cho kˆe´t qua˙’ tˆo´tho.n bˇa`ng c´ach xem d¯oa.n thˇa˙’ng nhu mˆo.t h`ınh ch˜u nhˆa.t c´o d¯ˆo rˆo.ng he.p v`a t´ınh to´an th´ıchho p c´ac cu.`o.ng d¯ˆo v´o.i nhiˆe` u pixel trˆen mˆo˜i cˆo.t nˇa`m trong hoˇa.c gˆa`n h`ınh ch˜u nhˆa.t (xem [9],[11]) Ngo`ai ra coi d¯oa.n thˇa˙’ng nhu h`ınh ch˜u nhˆa.t c˜ung cho ph´ep ta.o c´ac d¯oa.n thˇa˙’ng v´o.i d¯ˆo.rˆo.ng tu`y ´y

Ph´ac tha˙’o c´ac nguyˆen so x´ac d¯i.nh bo.˙’i c´ac d¯oa.n thˇa˙’ng V´o.i c´ach v˜e c´ac d¯oa.n thˇa˙’ng,ch´ung ta cˆa` n v˜e c´ac nguyˆen so d¯u.o c xˆay du ng t`u c´ac d¯oa.n thˇa˙’ng nhu thˆe´ n`ao? C´ac d¯u.`o.nggˆa´p kh´uc c´o thˆe˙’ d¯u.o c v˜e bˇa`ng c´ach xem n´o nhu c´ac d¯oa.n thˇa˙’ng kˆe` nhau C´ac h`ınh ch˜u.nhˆa.t v`a d¯a gi´ac l`a nh˜u.ng nguyˆen so v`ung v`a c´o thˆe˙’ v˜e c´ac ca.nh liˆen tiˆe´p nhu.ng d¯iˆe` u n`aydˆa˜n d¯ˆe´n mˆo.t sˆo´ pixel nˇa`m ngo`ai v`ung d¯i.nh ngh˜ıa bo.˙’i nguyˆen so.-xem c´ac Phˆa`n 4.6 v`a 4.7vˆe` nh˜u.ng thuˆa.t to´an xu.˙’ l´y vˆa´n d¯ˆe` n`ay Ch´u ´y rˇa`ng cˆa`n v˜e c´ac d¯ı˙’nh chung cu˙’a d¯u.`o.ng gˆa´pkh´uc mˆo.t lˆa`n do viˆe.c v˜e hai lˆa`n c´o thˆe˙’ l`am thay d¯ˆo˙’i m`au hoˇa.c d¯ˇa.t m`au nˆe` n khi viˆe´t trongchˆe´ d¯ˆo XOR trˆen m`an h`ınh, hoˇa.c tˇang cu.`o.ng d¯ˆo gˆa´p d¯ˆoi ta.i d¯´o Thˆa.t ra c´o nh˜u.ng pixelkh´ac l`a chung cu˙’a hai d¯oa.n thˇa˙’ng nˇa`m gˆa`n nhau hoˇa.c cˇa´t nhau

Trang 22

yyyyyyyyyyD- u.`o.ng thˇa˙’ng l1

H`ınh 1.5: Thay d¯ˆo˙’i cu.`o.ng d¯ˆo cu˙’a c´ac d¯u.`o.ng thˇa˙’ng theo hˆe sˆo´ g´oc

1.1.4 C´ ac thuˆ o.c t´ınh cu˙’a d¯oa.n thˇa˙’ng

Thuˆo.c t´ınh mˆa˜u tˆo d¯oa.n thˇa˙’ng c´o thˆe˙’ a˙’nh hu.o.˙’ng d¯ˆe´n nh˜u.ng nguyˆen so kh´ac N´oi chung

ta cˆa` n su.˙’ du.ng d¯iˆe`u kiˆe.n logic d¯ˆe˙’ kiˆe˙’m tra c´o d¯ˇa.t d¯iˆe˙’m v˜e hay khˆong, chı˙’ d¯ˇa.t khi d¯iˆe`u kiˆe.nd¯´ung (gi´a tri 1) Ch´ung ta lu.u tr˜u mˆa˜u v˜e nhu mˆo.t chuˆo˜i d¯ˆo d`ai Tile Size (thu.`o.ng l`a l˜uyth`u.a cu˙’a 2: N´oi chung Tile Size = 16) l`a mˆa˜u c´o kiˆe˙’u Bool (chˇa˙’ng ha.n, 16 bit nguyˆen);

do d¯´o mˆa˜u tˆo d¯u.o c lˇa.p la.i sau khi v˜e 16 pixel Ch´ung ta thay d`ong lˆe.nh khˆong d¯iˆe` u kiˆe.nputpixel() trong thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng d¯ˆe˙’ xu.˙’ l´y tru.`o.ng ho p n`ay; chˇa˙’ng ha.n,

if bitstring[i % 16] putpixel(x, y, value);

trong d¯´o chı˙’ sˆo´ i l`a mˆo.t biˆe´n tˇang m´o.i trong v`ong lˇa.p bˆen trong cu˙’a thuˆa.t to´an Tuy nhiˆen,

c´ach l`am n`ay c´o mˆo.t ha.n chˆe´ l`a do mˆo˜i bit trong mˇa.t na tu.o.ng ´u.ng mˆo.t lˆa`n lˇa.p v`a khˆongtu.o.ng ´u.ng d¯ˆo d`ai d¯o.n vi do.c theo d¯oa.n thˇa˙’ng nˆen d¯ˆo d`ai cu˙’a n´et v˜e thay d¯ˆo˙’i theo hˆe sˆo´g´oc cu˙’a d¯oa.n thˇa˙’ng; n´et v˜e cu˙’a d¯oa.n thˇa˙’ng xiˆen s˜e d`ai ho.n n´et v˜e cu˙’a d¯oa.n thˇa˙’ng nganghay d¯´u.ng D- iˆe` u n`ay l`a khˆong chˆa´p nhˆa.n d¯u.o c v´o.i nh˜u.ng ´u.ng du.ng mang t´ınh ch´ınh x´accao, chˇa˙’ng ha.n trong thiˆe´t kˆe´ cˆong nghiˆe.p, v`a do d¯´o c´ac n´et v˜e cˆa`n t´ınh la.i sao cho phu.o.ngph´ap v˜e d¯oa.n thˇa˙’ng khˆong phu thuˆo.c v`ao hˆe sˆo´ g´oc cu˙’a n´o D- ˆo rˆo.ng cu˙’a d¯oa.n thˇa˙’ng d¯u.o cxem nhu mˆo.t d˜ay c´ac h`ınh ch˜u nhˆa.t d¯ˇa.c v`a trong suˆo´t d¯u.o c d¯ˇa.t xen k˜e nhau m`a c´ac d¯ı˙’nhcu˙’a n´o d¯u.o c t´ınh ch´ınh x´ac theo h`am phu thuˆo.c kiˆe˙’u v˜e d¯oa.n thˇa˙’ng Sau d¯´o thu c hiˆe.n tˆom`au trˆen t`u.ng h`ınh ch˜u nhˆa.t mˆo.t; v´o.i c´ac d¯oa.n thˇa˙’ng ngang hoˇa.c d¯´u.ng, ta c´o thˆe˙’ d`unglˆe.nh sao ch´ep c´ac h`ınh ch˜u nhˆa.t

Kiˆe˙’u d¯oa.n thˇa˙’ng v`a kiˆe˙’u b´ut v˜e c´o a˙’nh hu.o.˙’ng lˆa˜n nhau trong c´ac nguyˆen so liˆen quand¯ˆe´n d¯ˆo rˆo.ng d¯u.`o.ng biˆen Kiˆe˙’u d¯oa.n thˇa˙’ng thu.`o.ng d¯u.o c su.˙’ du.ng d¯ˆe˙’ x´ac d¯i.nh c´ac h`ınh ch˜u.nhˆa.t tu.o.ng ´u.ng c´ac n´et v˜e v`a mˆo˜i h`ınh ch˜u nhˆa.t d¯u.o c tˆo m`au v´o.i mˆa˜u b´ut d¯u.o c cho.n

Trang 23

1.2 D - u.`o.ng tr`on

X´et d¯u.`o.ng tr`on f (x, y) := x2+ y2− R2 = 0 C´o mˆo.t v`ai c´ach d¯o.n gia˙’n v˜e d¯u.`o.ng tr`on nhu.ng

khˆong hiˆe.u qua˙’

D- ˆe˙’ v˜e mˆo.t phˆa`n tu d¯u.`o.ng tr`on trong g´oc phˆa`n tu th´u nhˆa´t

{(x, y) ∈ R2 | x ≥ 0, y ≥ 0}

(c´ac cung kh´ac d¯u.o c v˜e do t´ınh d¯ˆo´i x´u.ng) ta c´o thˆe˙’ tˇang x t`u 0 d¯ˆe´n R (mˆo˜i bu.´o.c mˆo.t d¯o.n vi.) v`a gia˙’i y = √ R2− x2 Phu.o.ng ph´ap n`ay khˆong hiˆe.u qua˙’ do su.˙’ du.ng ph´ep nhˆan v`a lˆa´y

cˇan bˆa.c hai Ngo`ai ra c´o nh˜u.ng lˆo˜ hˆo˙’ng khi gi´a tri x gˆa`n v´o.i R v`ı tiˆe´p tuyˆe´n v´o.i d¯u.`o.ng tr`on

ta.i nh˜u.ng d¯iˆe˙’m tu.o.ng ´u.ng tiˆe´n d¯ˆe´n d¯u.`o.ng thˇa˙’ng song song v´o.i tru.c tung Phu.o.ng ph´ap

kh´ac tu.o.ng tu , c˜ung khˆong hiˆe.u qua˙’, tr´anh nh˜u.ng lˆo˜ hˆo˙’ng l`a v˜e c´ac d¯iˆe˙’m (R cos θ, R sin θ) v´o.i θ thay d¯ˆo˙’i t`u 0 d¯ˆe´n 900.

1.2.1 D - ˆo´i x´u.ng t´am d¯iˆe˙’m

Ch´ung ta c´o thˆe˙’ gia˙’m b´o.t qu´a tr`ınh t´ınh to´an du a trˆen t´ınh d¯ˆo´i x´u.ng cu˙’a d¯u.`o.ng tr`on quac´ac tru.c ch´ınh Chı˙’ cˆa`n x´et d¯u.`o.ng tr`on tˆam ta.i gˆo´c v`ı nˆe´u khˆong ta thu c hiˆe.n ph´ep ti.nhtiˆe´n t`u tˆam vˆe` gˆo´c to.a d¯ˆo Nˆe´u d¯iˆe˙’m (x, y) nˇa`m trˆen d¯u.`o.ng tr`on th`ı ba˙’y d¯iˆe˙’m

(x, −y), (y, x), (y, −x), (−x, −y), (−y, −x), (−y, x), (−x, y)

c˜ung nˇa`m trˆen d¯u.`o.ng tr`on

Do d¯´o ta chı˙’ cˆa` n v˜e mˆo.t cung 450 v`a t`u d¯´o sinh ra d¯u.`o.ng tr`on V´o.i d¯u.`o.ng tr`on tˆamta.i gˆo´c, t´am d¯iˆe˙’m d¯ˆo´i x´u.ng c´o thˆe˙’ d¯u.o c hiˆe˙’n thi bˇa`ng thu˙’ tu.c sau (m`a dˆe˜ d`ang tˆo˙’ng qu´atho´a v´o.i c´ac d¯u.`o.ng tr`on tˆam tu`y ´y):

void CirclePoints(int x, int y, int Value)

{

putpixel(x, y, Value);

putpixel(y, x, Value);

putpixel(y, -x, Value);

putpixel(x, -y, Value);

putpixel(-x, -y, Value);

putpixel(-y, -x, Value);

Trang 24

putpixel(-y, x, Value);

putpixel(-x, y, Value);

}

Cˆa` n ch´u ´y rˇa`ng khˆong nˆen go.i thu˙’ tu.c CirclePoints() khi x = y do c´o bˆo´n pixel d¯u.o c

v˜e hai lˆa` n; ta chı˙’ cˆa` n thay d¯ˆo˙’i d¯oa.n m˜a xu.˙’ l´y d¯iˆe`u kiˆe.n biˆen

1.2.2 Thuˆ a.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng tr`on

Bresenham [3] d¯˜a tr`ınh b`ay mˆo.t phu.o.ng ph´ap v˜e d¯u.`o.ng tr`on hiˆe.u qua˙’ ho.n c´ach d¯u.a ra o.˙’trˆen Ch´ung ta nˆeu thuˆa.t to´an tu.o.ng tu , su.˙’ du.ng tiˆeu chuˆa˙’n d¯iˆe˙’m gi˜u.a, m`a trong tru.`o.ngho p b´an k´ınh v`a c´ac to.a d¯ˆo cu˙’a tˆam l`a nh˜u.ng sˆo´ nguyˆen s˜e cho c`ung mˆo.t kˆe´t qua˙’ c´ac pixeltˆo´t nhˆa´t

Ta chı˙’ cˆa` n x´et cung mˆo.t phˆa`n t´am d¯u.`o.ng tr`on:

(C1) := {(x, y) ∈ R2 | x2+ y2 = R2, 0 ≤ y < x}

v`a su.˙’ du.ng thu˙’ tu.c CirclePoints() d¯ˆe˙’ hiˆe˙’n thi c´ac pixel trˆen to`an d¯u.`o.ng tr`on Vi phˆan

phu.o.ng tr`ınh f (x, y) := x2+ y2− r2 = 0 ta d¯u.o c 2xdx + 2ydy = 0 Nˆen dx

2, y i+ 1) cu˙’a

hai d¯iˆe˙’m v˜e n`ay Dˆe˜ d`ang ch´u.ng minh rˇa`ng, nˆe´u d¯iˆe˙’m M nˇa`m trong d¯u.`o.ng tr`on (tu.o.ng d¯u.o.ng f (M) < 0) th`ı T gˆa ` n d¯u.`o.ng tr`on ho.n; v`a M nˇa`m ngo`ai d¯u.`o.ng tr`on (tu.o.ng d¯u.o.ng

f (M) > 0) th`ı D gˆa ` n d¯u.`o.ng tr`on ho.n Tru.`o.ng ho p M nˇa`m trˆen d¯u.`o.ng tr`on (t´u.c f(M) = 0)

ta c´o thˆe˙’ cho.n mˆo.t trong hai, do d¯´o cho.n pixel D.

Trang 25

H`ınh 1.6: Lu.´o.i pixel trong thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng tr`on.

Nˆe´u d i ≥ 0 th`ı cho.n D v`a d¯iˆe˙’m gi˜u.a kˆe´ tiˆe´p c´o ho`anh d¯ˆo gia˙’m mˆo.t d¯o.n vi v`a tung d¯ˆo.

tˇang mˆo.t d¯o.n vi Nˆen

Suy ra d i+1 = d i + 2y i − 2x i + 5 Do d¯´o bu.´o.c tˇang ∆ D := 2(y i − x i ) + 5.

Nhˇa´c la.i l`a, trong tru.`o.ng ho p d¯u.`o.ng thˇa˙’ng, c´ac bu.´o.c tˇang ∆R v`a ∆D l`a c´ac hˇa`ng sˆo´;tuy nhiˆen, trong tru.`o.ng ho p d¯u.`o.ng cong bˆa.c hai, ∆T v`a ∆D l`a c´ac h`am phu thuˆo.c v`ao c´ac

to.a d¯ˆo cu˙’a d¯iˆe˙’m v˜e hiˆe.n h`anh (x i , y i ) C´ac h`am n`ay c´o thˆe˙’ t´ınh to´an tru c tiˆe´p ta.i mˆo˜i bu.´o.c lˇa.p du a v`ao c´ac gi´a tri x v`a y cu˙’a pixel d¯u.o c cho.n trong bu.´o.c lˇa.p tru.´o.c T´ınh to´an nhu.

vˆa.y khˆong hiˆe.u qua˙’ do c´ac h`am n`ay l`a tuyˆe´n t´ınh (xem Nhˆa.n x´et 1.2.1)

Cuˆo´i c`ung cˆa` n t´ınh d0 V´o.i gia˙’ thiˆe´t b´an k´ınh nguyˆen, ta biˆe´t rˇa`ng pixel kho.˙’i ta.o

ban d¯ˆa` u c´o to.a d¯ˆo (R, 0) nˆen d¯iˆe˙’m gi˜u.a c´o to.a d¯ˆo (R − 1

2, 1) v`a do d¯´o d0 = f (R − 1

2, 1) =

(R −1

2)2+ 1 − R2 = 5

4 − R Tˆo˙’ng kˆe´t ta c´o thuˆa.t to´an v˜e d¯u.`o.ng tr`on tˆam ta.i gˆo´c to.a d¯ˆo v`a

b´an k´ınh R nhu sau:

1 [Kho.˙’i ta.o] D- ˇa.t x0 = R, y0 = 0, d0 = 5/4 − R.

2 Gia˙’ su.˙’ o.˙’ bu.´o.c th´u i ta c´o d¯iˆe˙’m v˜e tˆo´t nhˆa´t (x i , y i ) v`a biˆe´n quyˆe´t d¯i.nh d i

3 [V˜e pixel hiˆe.n h`anh] D- ˇa.t t´am d¯iˆe˙’m v˜e du a trˆen (x i , y i ).

Trang 26

4 [Cˆa.p nhˆa.t] Nˆe´u x i = y i , thuˆa.t to´an d`u.ng; ngu.o c la.i, d¯ˇa.t

d i + 2(y i − x i ) + 5 nˆe´u ngu.o c la.i.

5 Thay i bˇa`ng (i + 1) v`a lˇa.p la.i Bu.´o.c 3.

Nhˆa.n x´et 1.2.1 (i) Vˆa´n d¯ˆe` v´o.i thuˆa.t to´an v`u.a tr`ınh b`ay, ta l`am viˆe.c trˆen c´ac sˆo´ thu c v`ıkho.˙’i ta.o biˆe´n quyˆe´t d¯i.nh l`a sˆo´ thu c Mˇa.c d`u c´o thˆe˙’ dˆe˜ d`ang ca˙’i tiˆe´n d¯ˆe˙’ xu.˙’ l´y cho d¯u.`o.ngtr`on c´o tˆam hoˇa.c b´an k´ınh khˆong nguyˆen, ta s˜e tr`ınh b`ay c´ach t´ınh to´an sˆo´ nguyˆen hiˆe.u qua˙’ho.n N´oi c´ach kh´ac ta s˜e khu.˙’ c´ac mˆa˜u sˆo´ trong chu.o.ng tr`ınh

D- ˆa`u tiˆen, x´et biˆe´n m´o.i h i = d i − 1

4 v`a thay d i bo.˙’i h i+ 1

4 trong thuˆa.t to´an Khi d¯´o ta

kho.˙’i ta.o h0 = 1 − R v`a so s´anh d i < 0 tu.o.ng d¯u.o.ng h i < −1

4 Tuy nhiˆen, do h0 nguyˆen v`ad¯u.o c tˇang bo.˙’i c´ac gi´a tri nguyˆen (∆T v`a ∆D) nˆen chı˙’ cˆa` n so s´anh h i < 0 Nhu vˆa.y, ch´ung

ta c´o thuˆa.t to´an v˜e d¯u.`o.ng tr`on chı˙’ su.˙’ du.ng c´ac sˆo´ nguyˆen nhu du.´o.i d¯ˆay; d¯ˆe˙’ nhˆa´t qu´an v´o.i

thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng, ta thay h l`a d.

void MidPointCircle(int R, int Value)

Trang 27

(ii) Ch´ung ta c`on c´o thˆe˙’ ca˙’i tiˆe´n tˆo´t ho.n thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng tr`on nhu sau Ch´u

´y rˇa`ng c´ac h`am ∆ l`a phu.o.ng tr`ınh tuyˆe´n t´ınh v`a c´o thˆe˙’ t´ınh tru c tiˆe´p Tuy nhiˆen d`ung

phu.o.ng ph´ap sai phˆan bˆa.c mˆo.t-hai d¯ˆe˙’ x´ac d¯i.nh ch´ung hiˆe.u qua˙’ ho.n: u.´o.c lu.o ng h`am ta.i

hai d¯iˆe˙’m v˜e kˆe` nhau, t´ınh hiˆe.u (trong tru.`o.ng ho p d¯a th´u.c, luˆon luˆon cho d¯a th´u.c bˆa.c thˆa´pho.n) v`a ´ap du.ng hiˆe.u trong mˆo˜i bu.´o.c lˇa.p

Nˆe´u cho.n T trong bu.´o.c lˇa.p kˆe´ tiˆe´p th`ı d¯iˆe˙’m hiˆe.n h`anh s˜e di chuyˆe˙’n t`u (x i , y i) d¯ˆe´n

(x i , y i + 1) Ta biˆe´t rˇa`ng, sai phˆan bˆa.c mˆo.t ∆ T ta.i (x i , y i ) bˇa`ng 2y i + 3 Do d¯´o ∆ T ta.i

(x i , y i + 1) bˇa`ng 2(y i + 1) + 3 Suy ra sai phˆan bˆa.c hai ∆ T,i+1 − ∆ T,i = 2 Tu.o.ng tu , ∆ D ta.i

(x i , y i ) bˇa`ng 2(y i − x i ) + 5 Do d¯´o ∆ D ta.i (x i , y i + 1) bˇa`ng 2(y i + 1 − x i ) + 5 Suy ra sai phˆan

bˆa.c hai ∆D,i+1 − ∆ D,i = 2.

Nˆe´u cho.n D trong bu.´o.c lˇa.p kˆe´ tiˆe´p th`ı d¯iˆe˙’m hiˆe.n h`anh di chuyˆe˙’n t`u (x i , y i) d¯ˆe´n

(x i − 1, y i + 1) Do d¯´o ∆ T ta.i (x i , y i ) bˇa`ng 2(y i + 1) + 3, v`a sai phˆan bˆa.c hai ∆ T,i+1 − ∆ T,i = 2.

Tu.o.ng tu , ∆D ta.i (x i − 1, y i + 1) bˇa`ng 2[(y i + 1) − (x i − 1)] + 5 Suy ra sai phˆan bˆa.c hai

D,i+1 − ∆ D,i = 4.

Vˆa.y thuˆa.t to´an ca˙’i biˆen gˆo`m c´ac bu.´o.c: (1) cho.n pixel du a trˆen dˆa´u cu˙’a biˆe´n quyˆe´t

d¯i.nh d i d¯u.o c x´ac d¯i.nh trong bu.´o.c lˇa.p tru.´o.c; (2) cˆa.p nhˆa.t biˆe´n quyˆe´t d¯i.nh d i theo ∆T hoˇa.c

D; (3) cˆa.p nhˆa.t c´ac h`am ∆; v`a (4) di chuyˆe˙’n d¯ˆe´n pixel kˆe´ tiˆe´p ∆T v`a ∆D d¯u.o c kho.˙’i ta.o

du a trˆen pixel ban d¯ˆa`u (R, 0).

V´ı du 1.2.2 Gia˙’ su.˙’ d¯u.`o.ng tr`on c´o tˆam O(0, 0) b´an k´ınh R = 20 Ta c´o

Trang 28

mˆo.t phˆa`n t´am trong g´oc phˆa`n tu th´u nhˆa´t) nhu trong ba˙’ng du.´o.i:

Thu˙’ tu.c v˜e d¯u.`o.ng tr`on theo phu.o.ng ph´ap sai phˆan bˆa.c hai nhu sau:

void MidPointCircle(int R, int Value)

Trang 29

C´ac d¯u.`o.ng cong conic d¯u.o c nghiˆen c´u.u t`u rˆa´t lˆau C´o thˆe˙’ xem n´o nhu giao cu˙’a mˆo.t mˇa.tphˇa˙’ng v´o.i mˆo.t mˇa.t n´on N´o c˜ung c´o thˆe˙’ d¯u.o c x´ac d¯i.nh nhu tˆa.p c´ac d¯iˆe˙’m n`ao d¯´o, chˇa˙’ngha.n d¯u.`o.ng tr`on, m`a khoa˙’ng c´ach d¯ˆe´n mˆo.t d¯iˆe˙’m khˆong d¯ˆo˙’i Trong h`ınh ho.c gia˙’i t´ıch, c´acconic d¯u.o c xem nhu c´ac tˆa.p con cu˙’a R2 : Ch´ung ta d¯i.nh ngh˜ıa mˆo.t conic nhu tˆa.p ho p c´ac

d¯iˆe˙’m (x, y) ∈ R2 thoa˙’ m˜an phu.o.ng tr`ınh

Ax2 + Bxy + Cy2+ Dx + Ey + F = 0.

v´o.i c´ac sˆo´ thu c A, B, C, D, E, F n`ao d¯´o Viˆe.c phˆan loa.i conic (trong tru.`o.ng ho p kh´ac trˆo´ng)

l`a hyperbol, ellipse hay l`a parabol phu thuˆo.c v`ao dˆa´u cu˙’a biˆe.t th´u.c

δ := B2− 4AC

du.o.ng, ˆam, hay bˇa`ng khˆong (xem [12])

Mˇa.t kh´ac, ellipse l`a mˆo.t trong nh˜u.ng nguyˆen so cu˙’a d¯ˆo` ho.a m´ay t´ınh thu.`o.ng xuyˆend¯u.o c su.˙’ du.ng trong c´ac ´u.ng du.ng d¯ˆo` ho.a Do d¯´o c´o rˆa´t nhiˆe` u nghiˆen c´u.u nhˇa`m d¯u.a ranh˜u.ng thuˆa.t to´an h˜u.u hiˆe.u d¯ˆe˙’ v˜e c´ac ellipse trˆen c´ac thiˆe´t bi hiˆe˙’n thi raster (xem [26], [16],[17], [28])

Thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng thˇa˙’ng v`a d¯u.`o.ng tr`on c˜ung c´o thˆe˙’ ´ap du.ng d¯ˆe˙’ v˜e c´acd¯u.`o.ng cong conic tˆo˙’ng qu´at Mu.c d¯´ıch cu˙’a phˆa`n n`ay l`a:

Trang 30

1 V˜e ellipse “ch´ınh tˇa´c” v´o.i tˆam ta.i gˆo´c to.a d¯ˆo (0, 0) cho bo.˙’i phu.o.ng tr`ınh

b2x2+ a2y2− a2b2 = 0

trong d¯´o 2a l`a d¯ˆo d`ai tru.c ch´ınh Ox v`a 2b l`a d¯ˆo d`ai tru.c phu Oy.

2 V˜e ellipse trong tru.`o.ng ho p bˆa´t k`y

1.3.1 Ellipse c´ o da.ng ch´ınh tˇa´c

D- ˆe˙’ d¯o.n gia˙’n, do t´ınh d¯ˆo´i x´u.ng, ch´ung ta chı˙’ cˆa`n v˜e ellipse nˇa`m trong g´oc phˆa`n tu th´u nhˆa´t:

(E I ) := {(x, y) ∈ R2 | f (x, y) := b2x2 + a2y2− a2b2 = 0, x ≥ 0, y ≥ 0}.

C˜ung ch´u ´y rˇa`ng, c´ac ellipse ch´ınh tˇa´c tˆam ta.i to.a d¯ˆo nguyˆen c´o thˆe˙’ d¯u.a vˆe` tˆam ta.i gˆo´c to.ad¯ˆo bˇa`ng ph´ep ti.nh tiˆe´n Thuˆa.t to´an tr`ınh b`ay o.˙’ d¯ˆay cu˙’a Da Silva [6] l`a su tˆo˙’ng ho p c´acphu.o.ng ph´ap cu˙’a Pitteway [16], Van Aken [26] v`a Kappel [10]

Phˆan t´ıch

´

Y tu.o.˙’ng cu˙’a c´ac phu.o.ng ph´ap d¯u.o c tr`ınh b`ay trong phˆa`n sau l`a xuˆa´t ph´at t`u pixel (x0, y0)

n`ao d¯´o trˆen cung (E I ) ch´ung ta xˆay du ng mˆo.t d˜ay c´ac pixel “tˆo´t nhˆa´t” (x n , y n ) Kh´ai niˆe.m

tˆo´t nhˆa´t o.˙’ d¯ˆay d¯u.o c hiˆe˙’u l`a cho.n d˜ay c´ac pixel (x n , y n) gˆa` n v´o.i d¯u.`o.ng cong thu c tˆe´ (o.˙’ da.ngliˆen tu.c) nhˆa´t

Trˆen cung (E I ) ta chia l`am hai v`ung (E1

I ) v`a (E2

I ) Biˆen gi˜u.a hai v`ung x´ac d¯i.nh bo.˙’i d¯iˆe˙’m trˆen ellipse m`a tiˆe´p tuyˆe´n v´o.i d¯u.`o.ng cong ta.i d¯´o c´o hˆe sˆo´ g´oc bˇa`ng −1 (H`ınh 1.7); t´u.c l`a ta.i d¯iˆe˙’m m`a c´ac th`anh phˆa`n cu˙’a vector gradient ∇f(x, y) := ( ∂f

∂x , ∂f

∂y)tc´o d¯ˆo l´o.n bˇa`ngnhau Th`anh phˆa` n ∂f

∂y nho˙’ ho.n th`anh phˆa` n ∂f

∂x trong v`ung th´u nhˆa´t v`a ngu.o c la.i trong v`ungth´u hai Ch´ınh x´ac l`a

Do d¯´o, nˆe´u ta.i vi tr´ı d¯iˆe˙’m gi˜u.a xa˙’y ra a2(y i + 1) ≥ b2(x i − 1

2) th`ı ch´ung ta chuyˆe˙’n t`u v`ungth´u nhˆa´t sang v`ung th´u hai

Trang 31

H`ınh 1.7: Hai v`ung cu˙’a ellipse.

T`u phu.o.ng tr`ınh x´ac d¯i.nh ellipse, cung (E I ) x´ac d¯i.nh bo.˙’i c´ac cˇa.p to.a d¯ˆo (x, y) v´o.i

s˜e cho.n mˆo.t trong hai pixel T := (x i , y i + 1) hoˇa.c D := (x i − 1, y i+ 1) (xem H`ınh 1.8).Tu.o.ng tu thuˆa.t to´an d¯iˆe˙’m gi˜u.a v˜e d¯u.`o.ng thˇa˙’ng v`a d¯u.`o.ng tr`on, ta cˆa`n u.´o.c lu.o ng h`am

f (x, y) ta.i d¯iˆe˙’m gi˜u.a M := (x i − 1

2, y i + 1) cu˙’a hai pixel T v`a D v`a su.˙’ du.ng dˆa´u cu˙’a f(M) d¯ˆe˙’ x´ac d¯i.nh vi tr´ı cu˙’a M v´o.i ellipse, v`a do d¯´o x´ac d¯i.nh pixel n`ao gˆa`n v´o.i ellipse ho.n X´et

biˆe´n quyˆe´t d¯i.nh

Trang 32

Do d¯´o d i+1 = d i + a2(2y i + 3) v´o.i bu.´o.c tˇang ∆T := a2(2y i + 3).

Khi di chuyˆe˙’n t`u pixel hiˆe.n h`anh d¯ˆe´n pixel D th`ı d¯iˆe˙’m gi˜u.a c´o ho`anh d¯ˆo gia˙’m mˆo.t

d¯o.n vi v`a tung d¯ˆo tˇang mˆo.t d¯o.n vi., nˆen

Suy ra d i+1 = d i + b2(−2x i + 2) + a2(2y i+ 3) v´o.i bu.´o.c tˇang ∆D := b2(−2x i + 2) + a2(2y i + 3).

Bˆay gi`o ta cˆa` n t´ınh gi´a tri kho.˙’i ta.o Gia˙’ thiˆe´t a v`a b nguyˆen, ellipse bˇa´t d¯ˆa`u ta.i (a, 0)

v`a d¯iˆe˙’m gi˜u.a d¯ˆa` u tiˆen c´o to.a d¯ˆo (a − 1

2, 1) Do d¯´o

d0 = a2− ab2+ b2/4.

V´o.i mˆo˜i bu.´o.c lˇa.p trong v`ung th´u nhˆa´t, ch´ung ta khˆong chı˙’ kiˆe˙’m tra biˆe´n quyˆe´t d¯i.nh d i v`acˆa.p nhˆa.t c´ac h`am ∆ m`a c`on x´et d¯˜a kˆe´t th´uc v`ung th´u nhˆa´t chu.a du a trˆen vector gradient

ta.i d¯iˆe˙’m gi˜u.a cu˙’a d¯oa.n T D Vˆa.y d˜ay {(x i , y i )} i≥0 d¯u.o c xˆay du ng theo quy na.p thˆong qua

d˜ay biˆe´n quyˆe´t d¯i.nh {d i } nhu sau:

1 [Kho.˙’i ta.o] D- ˇa.t x0 = a; y0 = 0; d0 = a2− ab2+ b2/4.

2 [Kˆe´t th´uc?] Nˆe´u a2(y i + 1) ≥ b2(x i −1

2) th`ı d`u.ng (kˆe´t th´uc v`ung th´u nhˆa´t) v`a chuyˆe˙’nsang v˜e v`ung th´u hai

3 [Cˆa.p nhˆa.t] Ngu.o c la.i

Trang 33

• V˜e bˆo´n pixel: (x i , y i ), (x i , −y i ), (−x i , y i ), (−x i , −y i ).

I ) ta c´o −1 ≤ dy dx ≤ 0 Nˆen khi x gia˙’m mˆo.t d¯o.n vi th`ı

y tˇang khˆong qu´a mˆo.t d¯o.n vi V`ı vˆa.y, gia˙’ thiˆe´t o.˙’ bu.´o.c th´u i ta cho.n d¯u.o c d¯iˆe˙’m v˜e tˆo´t

nhˆa´t C := (x i , y i ) th`ı bu.´o.c kˆe´ tiˆe´p (i + 1) ta s˜e cho.n pixel (x i+1 , y i+1 ) v´o.i x i+1 = x i − 1 v`a

y i+1 = y i hoˇa.c y i+1 = y i + 1 N´oi c´ach kh´ac, bu.´o.c th´u (i + 1) ch´ung ta s˜e cho.n mˆo.t trong hai pixel L := (x i − 1, y i ) hoˇa.c D := (x i − 1, y i+ 1) (xem H`ınh 1.9)

Ta lˆa´y pixel d¯u.o c v˜e o.˙’ bu.´o.c cuˆo´i cu˙’a v`ung th´u nhˆa´t l`a pixel kho.˙’i ta.o (x0, y0) cu˙’av`ung th´u hai Trong v`ung n`ay ch´ung ta cˆa` n cho.n mˆo.t trong hai pixel L hoˇa.c D D - ˇa.t M l`a d¯iˆe˙’m gi˜u.a cu˙’a d¯oa.n LD; t´u.c M c´o to.a d¯ˆo l`a (x i − 1, y i+1

2) Tu.o.ng tu nhu trˆen, ta c´o d¯iˆe˙’m

M nˇa`m trong, trˆen hay ngo`ai ellipse nˆe´u v`a chı˙’ nˆe´u biˆe˙’u th´u.c f (M) ˆam, bˇa`ng khˆong hay

du.o.ng tu.o.ng ´u.ng D- ˇa.t

Do d¯´o d i+1 = d i + b2(−2x i+ 3) v´o.i bu.´o.c tˇang ∆L := b2(−2x i + 3).

Khi di chuyˆe˙’n t`u pixel hiˆe.n h`anh d¯ˆe´n pixel D th`ı d¯iˆe˙’m gi˜u.a c´o ho`anh d¯ˆo gia˙’m mˆo.t

d¯o.n vi v`a tung d¯ˆo tˇang mˆo.t d¯o.n vi., nˆen

Trang 34

H`ınh 1.9: D- iˆe˙’m gi˜u.a M v`a c´ac pixel L v`a D.

Cuˆo´i c`ung ta cˆa` n kho.˙’i ta.o biˆe´n quyˆe´t d¯i.nh d0 trong v`ung th´u hai: nˆe´u pixel cuˆo´i c`ung

E d¯u.o c cho.n trong v`ung th´u nhˆa´t l`a (x E , y E ) th`ı d¯ˇa.t d0 := f (x E − 1, y E+1

2) Ch´ung ta kˆe´t th´uc v˜e v`ung th´u hai khi ho`anh d¯ˆo x i = 0 Ta c´o c´ac bu.´o.c mˆo ta˙’ cho v`ung th´u hai nhu sau:

1 [Kho.˙’i ta.o] D- ˇa.t (x0, y0) = (x E , y E ) v`a d0 = b2(x2

E − 2x E + 1) + a2(y2

E + y E+ 1

4) − a2b2.

2 [Kˆe´t th´uc?] Nˆe´u (x i = 0) th`ı d`u.ng (kˆe´t th´uc v`ung th´u hai);

3 [Cˆa.p nhˆa.t] Ngu.o c la.i

• V˜e bˆo´n pixel: (x i , y i ), (x i , −y i ), (−x i , y i ), (−x i , −y i ).

4 D- ˇa.t x i+1 = x i − 1, thay i bo.˙’i i + 1 v`a chuyˆe˙’n sang Bu.´o.c 2.

Nhˆa.n x´et 1.3.1 (i) Trong tru.`o.ng ho p c´ac to.a d¯ˆo tˆam ellipse v`a c´ac b´an k´ınh a, b nguyˆen,

d¯ˆe˙’ tr´anh t´ınh to´an trˆen sˆo´ thu c, ch´ung ta c´o thˆe˙’ khu.˙’ phˆan sˆo´ v`a chı˙’ ´ap du.ng c´ac ph´ep to´antrˆen sˆo´ nguyˆen

(ii) C˜ung c´o thˆe˙’ t´ınh c´ac h`am ∆ tru c tiˆe´p trong mˆo˜i bu.´o.c lˇa.p hoˇa.c su.˙’ du.ng phu.o.ng ph´apsai phˆan bˆa.c hai nhu trong thuˆa.t to´an v˜e d¯u.`o.ng tr`on Ch´ung ta c´o thˆe˙’ v˜e c´ac ellipse qua

Trang 35

H`ınh 1.10: (a) H`ınh vuˆong bao d¯u.`o.ng tr`on (b) H`ınh vuˆong v`a h`ınh tr`on qua ph´ep biˆe´nd¯ˆo˙’i.

ph´ep quay v`a c´ac ellipse c´o “d¯ˆo dˆa`y” he.p; t´u.c v´o.i nh˜u.ng tru.`o.ng ho p |a| ¿ 1 ¿ |b| hoˇa.c

ngu.o c la.i (xem [6])

1.3.2 Ellipse trong tru.` o.ng ho p tˆ o˙’ng qu´ at

Trong phˆa` n tru.´o.c ta d¯˜a xˆay du ng thuˆa.t to´an v˜e d¯u.`o.ng cong ellipse m`a c´ac tru.c cu˙’a n´o songsong v´o.i c´ac tru.c to.a d¯ˆo cu˙’a mˇa.t phˇa˙’ng Phˆa`n n`ay xˆay du ng thuˆa.t to´an, du a trˆen phu.o.ngph´ap d¯iˆe˙’m gi˜u.a cu˙’a Van Aken, d¯ˆe˙’ v˜e c´ac d¯u.`o.ng cong conic tˆo˙’ng qu´at bao gˆo`m c´ac ellipse,hyperbol v`a parabol Thuˆa.t to´an n`ay du a trˆen thuˆa.t to´an v˜e d¯u.`o.ng cong cu˙’a Pitteway [16]d¯u.a ra nˇam 1967, hai nˇam sau khi Bresenham cˆong bˆo´ thuˆa.t to´an v˜e d¯u.`o.ng thˇa˙’ng [4].Thuˆa.t to´an conic chia l`am hai phˆa`n t´ach biˆe.t: D- ˇa.c ta˙’ conic c´o da.ng tˆo˙’ng qu´at

f (x, y) := Ax2+ Bxy + Cy2+ Dx + Ey + F = 0.

v´o.i A, B, C, E, F l`a c´ac hˆe sˆo´thu c Phu.o.ng ph´ap x´ac d¯i.nh conic bˇa`ng phu.o.ng tr`ınh f(x, y) =

0 kh´o h`ınh dung h`ınh ho.c v`a do d¯´o ta s˜e kha˙’o s´at mˆo.t c´ach kh´ac Ch´ung ta s˜e chı˙’ tr`ınh b`ayvˆe` ellipse, nhu.ng nh˜u.ng l´y luˆa.n tu.o.ng tu c´o thˆe˙’ ´ap du.ng cho l´o.p c´ac d¯u.`o.ng cong hyperbolv`a parabol

D- u.`o.ng tr`on tˆam O(0, 0) b´an k´ınh d¯o.n vi.:

x2+ y2 = 1

nˇa`m trong h`ınh vuˆong V.

Trang 36

X´et ph´ep biˆe´n d¯ˆo˙’i affine T trˆen mˇa.t phˇa˙’ng R2 Khi d¯´o ´anh xa T biˆe´n d¯ˆo˙’i h`ınh vuˆong

V th`anh h`ınh b`ınh h`anh v`a d¯u.`o.ng tr`on biˆe´n d¯ˆo˙’i th`anh ellipse (H`ınh 1.10) C´ac d¯iˆe˙’m gi˜u.a

P, Q cu˙’a c´ac ca.nh cu˙’a h`ınh b`ınh h`anh nˇa`m trˆen ellipse C´ac d¯iˆe˙’m P, Q v`a tˆam J cu˙’a h`ınh

b`ınh h`anh x´ac d¯i.nh duy nhˆa´t mˆo.t h`ınh b`ınh h`anh v`a do d¯´o x´ac d¯i.nh duy nhˆa´t ellipse Nhˆa.nx´et rˇa`ng nˆe´u c´o thˆe˙’ x´ac d¯i.nh c´ac hˆe sˆo´ trong tru.`o.ng ho p tˆam ellipse l`a gˆo´c to.a d¯ˆo th`ı ch´ung

ta c˜ung c´o thˆe˙’ xu.˙’ l´y trong tru.`o.ng ho p tˆo˙’ng qu´at Ta chı˙’ cˆa`n ´ap du.ng ph´ep ti.nh tiˆe´n d¯ˆe´n

tˆam J (D˜ı nhiˆen, d¯iˆe ` u n`ay chı˙’ d¯´ung khi J c´o c´ac to.a d¯ˆo nguyˆen) V`ı vˆa.y c´o thˆe˙’ gia˙’ thiˆe´t J l`a gˆo´c to.a d¯ˆo v`a P, Q l`a nh˜u.ng d¯iˆe˙’m d¯˜a d¯u.o c biˆe´n d¯ˆo˙’i tu.o.ng ´u.ng Ch´ung ta gia˙’ thiˆe´t rˇa`ng

cung (ngˇa´n) cu˙’a ellipse d¯i.nh hu.´o.ng ngu.o c chiˆe` u kim d¯ˆo`ng hˆo` (quanh tˆam J) t`u P d¯ˆe´n Q; ngu.o c la.i, ho´an d¯ˆo˙’i P v`a Q.

D- ˆe˙’ x´ac d¯i.nh phu.o.ng tr`ınh ellipse ta cˆa`n t`ım ph´ep biˆe´n d¯ˆo˙’i affine trong R2 c´ac d¯iˆe˙’mµ

Ph´ep biˆe´n d¯ˆo˙’i T trong tru.`o.ng

ho p n`ay x´ac d¯i.nh bo.˙’i: µ

x y

.

Ph´ep biˆe´n d¯ˆo˙’i T biˆe´n d¯ˆo˙’i c´ac d¯iˆe˙’m trˆen d¯u.`o.ng tr`on:

µ10

cos(α) +

µ01

Bˆay gi`o ti.nh tiˆe´n ellipse theo vector P J, ta d¯u.o c ellipse m´o.i c´o tˆam ta.i −P, t´u.c l`a −→

thay x = x + x P , y = y + y P v`ao phu.o.ng tr`ınh ellipse ta d¯u.o c phu.o.ng tr`ınh x´ac d¯i.nh ellipsem´o.i

A(x + x P)2+ B(x + x P )(y + y P ) + C(y + y P)2+ D(x + x P ) + E(y + y P ) + F =

A 0 x2+ B 0 xy + C 0 y2+ D 0 x + E 0 y + F 0 = 0,

trong d¯´o

D 0 = 2y Q (x P y Q − y P x Q ), E 0 = −2x Q (x P y Q − y P x Q ), F 0 = 0.

Trang 37

´u.ng.

Trang 38

Nhˆa.n x´et rˇa`ng gˆo´c to.a d¯ˆo nˇa`m trˆen ellipse m´o.i c´o tˆam ta.i −P, v`a nˆe´u ta v˜e d¯u.o c ellipse m´o.i n`ay th`ı s˜e v˜e d¯u.o c ellipse ban d¯ˆa`u V`ı A, B, C khˆong thay d¯ˆo˙’i qua ph´ep ti.nh tiˆe´n, nˆen d¯ˆe˙’ gia˙’n tiˆe.n, ta s˜e k´ı hiˆe.u D v`a C thay cho D 0 , C 0 (trong d¯´o D v`a E ban d¯ˆa` u bˇa`ng0).

Tiˆe´n tr`ınh tiˆe´p theo l`a v˜e ellipse Ch´ung ta chia th`anh t´am cung v˜e C´ac cung v˜e cho

biˆe´t hu.´o.ng di chuyˆe˙’n trong thuˆa.t to´an Trong cung th´u nhˆa´t ta di chuyˆe˙’n sang pha˙’i v`a di

chuyˆe˙’n ch´eo lˆen C´o hai c´ach di chuyˆe˙’n, go.i l`a di chuyˆe˙’n b`an c`o hoˇa.c di chuyˆe˙’n ch´eo, phu.

thuˆo.c v`ao mˆo.t hoˇa.c ca˙’ hai to.a d¯ˆo thay d¯ˆo˙’i H`ınh 1.11 minh ho.a t´am cung v˜e, c´ac cungtu.o.ng ´u.ng mˆo.t ellipse v`a ba˙’ng chı˙’ ra hu.´o.ng di chuyˆe˙’n trong mˆo˜i tru.`o.ng ho p

Thuˆa.t to´an du.´o.i d¯ˆay chia l`am hai bu.´o.c lˇa.p kh´ac nhau - mˆo.t lˆa`n theo c´ac cung d¯´anhsˆo´ le˙’, kˆe´t th´uc khi d¯a.t d¯ˆe´n biˆen cung ch´eo v`a mˆo.t d¯ˆo´i v´o.i c´ac cung chˇa˜n, kˆe´t th´uc khi d¯a.td¯ˆe´n biˆen b`an c`o D- ˆe˙’ x´ac d¯i.nh c´ac cung kho.˙’i d¯ˆa`u, ta nhˆa.n x´et rˇa`ng vector gradient

vuˆong g´oc v´o.i tiˆe´p tuyˆe´n cu˙’a conic ta.i d¯iˆe˙’m d¯u.o c t´ınh Ch´ung ta su.˙’ du.ng c´ac to.a d¯ˆo

cu˙’a vector ∇f (x, y) = ( ∂f ∂x , ∂f ∂y)t d¯ˆe˙’ x´ac d¯i.nh hu.´o.ng di chuyˆe˙’n (bˇa`ng c´ach quay 900 ngu.o cchiˆe` u kim d¯ˆo`ng hˆo`) v`a do d¯´o hu.´o.ng di chuyˆe˙’n cu˙’a cung v˜e V`ı d¯iˆe˙’m bˇa´t d¯ˆa` u l`a (0, 0) nˆen

∇f (0, 0) = (D, E) Thu˙’ tu.c GetOctant() nhˇa`m phˆan loa.i c´ac cung xuˆa´t ph´at theo vector

D- ˆe˙’ ´ap du.ng thuˆa.t to´an d¯iˆe˙’m gi˜u.a, v´o.i mˆo˜i cung cˆa`n x´ac d¯i.nh gi´a tri cu˙’a biˆe´n quyˆe´t

d¯i.nh d v`a phu.o.ng ph´ap cˆa.p nhˆa.t n´o Khi di chuyˆe˙’n theo d¯u.`o.ng ch´eo ta s˜e cˆa.p nhˆa.t d bˇa`ng mˆo.t biˆe´n v; khi di chuyˆe˙’n theo b`an c`o., ta s˜e tˇang n´o bo.˙’i biˆe´n u Nˆe´u f(x, y) l`a phu.o.ng tr`ınh ellipse th`ı d l`a gi´a tri cu˙’a h`am f ta.i d¯iˆe˙’m gi˜u.a cu˙’a d¯oa.n nˆo´i hai pixel c´o thˆe˙’ d¯u.o c

cho.n trong bu.´o.c kˆe´ tiˆe´p

V`ı f (x, y) < 0 tu.o.ng ´u.ng bˆen trong ellipse v`a f (x, y) > 0 tu.o.ng ´u.ng bˆen ngo`ai ellipse nˆen d < 0 khi ellipse d¯i ph´ıa ngo`ai d¯iˆe˙’m gi˜u.a v`a do d¯´o ta cho.n d¯iˆe˙’m ngo`ai; ngu.o c la.i khi

Trang 39

d > 0 ta cho.n d¯iˆe˙’m trong; v´o.i d = 0, cho.n mˆo.t trong hai C´o thˆe˙’ cho.n theo c´ach cu˙’a Van

Aken: d¯ˆo´i v´o.i c´ac cung d¯´anh sˆo´ le˙’ ta s˜e di chuyˆe˙’n b`an c`o khi d < 0 v`a di chuyˆe˙’n ch´eo nˆe´u ngu.o c la.i V´o.i c´ac cung d¯´anh sˆo´ chˇa˜n, ta di chuyˆe˙’n ch´eo khi d < 0 v`a b`an c`o nˆe´u ngu.o c la.i Trong cung th´u nhˆa´t, gia˙’ su.˙’ o.˙’ bu.´o.c th´u i ta cho.n d¯u.o c pixel tˆo´t nhˆa´t C := (x i , y i ) K´y hiˆe.u d i l`a gi´a tri quyˆe´t d¯i.nh cho.n gi˜u.a R := (x i + 1, y i ) v`a D := (x i + 1, y i + 1) K´y hiˆe.u

u i+1 v`a v i+1 l`a c´ac d¯a.i lu.o ng cˆo.ng v`ao d i d¯ˆe˙’ ta.o d i+1 Khi d¯´o ch´ung ta cˆa` n thu c hiˆe.n v´o.imˆo˜i pixel l`a

1 D- ˇa.t d¯iˆe˙’m v˜e ta.i pixel (x i , y i);

2 Cho.n pixel kˆe´ tiˆe´p (x i+1 , y i+1 ) du a trˆen d i;

3 Cˆa.p nhˆa.t u i+1 v`a v i+1 t`u u i , v i trˆen co so.˙’ cho.n lu a o.˙’ Bu.´o.c 2;

4 Cˆa.p nhˆa.t d i+1 t`u d i du a trˆen u i+1 hoˇa.c v i+1;

5 Kiˆe˙’m tra thay d¯ˆo˙’i cung v˜e

Nhˇa´c la.i l`a d i+1 c´o thˆe˙’ d¯u.o c t´ınh t`u d i bˇa`ng k˜y thuˆa.t sai phˆan Gia˙’ thiˆe´t l`a d¯ang o.˙’ cungv˜e d¯ˆa` u tiˆen, d¯iˆe˙’m v˜e tˆo´t nhˆa´t l`a (x i , y i ) v`a ta c´o biˆe´n quyˆe´t d¯i.nh d i = f (x i + 1, y i+ 1

2) d¯ˆe˙’

cho.n pixel kˆe´ tiˆe´p Nˆe´u d i di chuyˆe˙’n theo b`an c`o th`ı x i+1 = x i + 1 v`a y i+1 = y i Do d¯´o biˆe´n

quyˆe´t d¯i.nh m´o.i d i+1 = f (x i + 2, y i+1

Mˇa.t kh´ac, nˆe´u di chuyˆe˙’n theo hu.´o.ng ch´eo th`ı d i = f (x i + 2, y i+ 3

2) v`a bu.´o.c tˇang l`a

Trang 40

th`ı khi di chuyˆe˙’n ch´eo ta c´o v i+1 = v i + (2A + 2B + 2C).

D- ˆe˙’ lu.u gi˜u nh˜u.ng gi´a tri u i v`a v i d¯ˆo´i v´o.i hai c´ach di chuyˆe˙’n b`an c`o v`a ch´eo, ta cˆa` ncˆa.p nhˆa.t nh˜u.ng gi´a tri n`ay kˆe˙’ ca˙’ khi ch´ung khˆong d¯u.o c su.˙’ du.ng Do d¯´o,

• v´o.i di chuyˆe˙’n b`an c`o.

v i+1 = (2A + B)x i+1 + (B + 2C)y i+1 + A + B/2 + D + E

Bˆay gi`o kha˙’o s´at viˆe.c thay d¯ˆo˙’i cung v˜e Nhˆa.n x´et rˇa`ng ch´ung ta kˆe´t th´uc v˜e cung (E1)

khi vector gradient ∇f (x, y) ty˙’ lˆe v´o.i vector

µ1

−1

N´oi c´ach kh´ac, ch´ung ta kˆe´t th´uc v˜e

cung (E1) khi tˆo˙’ng cu˙’a hai th`anh phˆa` n cu˙’a vector ∇f(x, y) bˇa`ng khˆong (H`ınh 1.12).

Mˇa.t kh´ac, dˆe˜ d`ang kiˆe˙’m tra rˇa`ng

Ngày đăng: 25/01/2014, 14:20

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] R. H. Bartels, J. C. Beatty, B. A. Barsky, An introduction to splines for use in computer graphics and geometry modeling, Los Altos, Calif.: Morgan Kaufman Publishers, Inc.1987 Sách, tạp chí
Tiêu đề: An introduction to splines for use in computer graphics and geometry modeling
Tác giả: R. H. Bartels, J. C. Beatty, B. A. Barsky
Nhà XB: Morgan Kaufman Publishers, Inc.
Năm: 1987
[2] J. E. Bresenham, Algorithm for computer control of digital plotter, IBM Syst., J. 4, No. 1, 1965, 25-30 Sách, tạp chí
Tiêu đề: Algorithm for computer control of digital plotter
[3] J. E. Bresenham, A linear algorithm incremental digital display of circular arcs, Comm., ACM 20, No. 2, 1977, 750-752 Sách, tạp chí
Tiêu đề: A linear algorithm incremental digital display of circular arcs
[4] J. E. Bresenham, Incremental line compaction, Computer J. 25, No. 1, 1982, 116-120 Sách, tạp chí
Tiêu đề: Incremental line compaction
[5] M. Cyrus, J. Beck Generalized two- and three-dimensional clipping, Computers and Graphics, Vol. 3 N. 1, 1978, 23-28 Sách, tạp chí
Tiêu đề: Generalized two- and three-dimensional clipping
[6] D. Da Silva, Raster algorithms for 2D primitives, Master’s Thesis, Computer Science Departement, Brown University, Providence, RI, 1989 Sách, tạp chí
Tiêu đề: Raster algorithms for 2D primitives
[7] G. Farin, Curves and surfaces for computer-aided geometric design, Orlando, Fla. Aca- demic Press Inc., 1990 Sách, tạp chí
Tiêu đề: Curves and surfaces for computer-aided geometric design
[8] I. D. Faux, M. J. Pratt, Computational geometry for design and manufacture, NewYork, Horwood/Wiley, 1979 Sách, tạp chí
Tiêu đề: Computational geometry for design and manufacture
[9] J. D. Foley, A. Van Dam, S. K. Feiner, J. F. Hughes, Computer graphics: principles and practice, Addison-Wesley, 1991 Sách, tạp chí
Tiêu đề: Computer graphics: principles andpractice
[10] M. R. Kappel, An ellipse drawing algorithm for raster displays, in R. Earnshaw, ed.Fundamental algorithms for computer graphics, NATO ASI Series, Springer-Verlag, Berlin, 1985, 257-280 Sách, tạp chí
Tiêu đề: An ellipse drawing algorithm for raster displays," in R. Earnshaw, ed."Fundamental algorithms for computer graphics
[11] F. S. Hill Jr., Computer graphics, Macmillan Publishing Company, New York 1988 Sách, tạp chí
Tiêu đề: Computer graphics
[12] J. Y. McLeod, M. L. Baar, Geometry and interpolation of curvex and surfaces, Cam- bridge University, 1998 Sách, tạp chí
Tiêu đề: Geometry and interpolation of curvex and surfaces
[13] M. Levoy, Design for a real-time high-quanlity volume rendering workstation, Proceed- ings of the Volume Visualization Workshop, Dep. Computer Science, Univ. North Car- olina at Chapel Hill, May 18-19, 1989, 85-90 Sách, tạp chí
Tiêu đề: Design for a real-time high-quanlity volume rendering workstation
[14] T. M. Nicholl D. T. Lee, R. A. Nicholl, An efficient new algorithm for 2-D line clipping:Its development and analysis, SIGGRAPH 1987, 253-262 Sách, tạp chí
Tiêu đề: An efficient new algorithm for 2-D line clipping:"Its development and analysis
[15] T. Pavlidis, Contour filling in raster graphics, Computer graphics, 1981 Sách, tạp chí
Tiêu đề: Contour filling in raster graphics
[16] M. Pitteway, Algorithm for drawing ellipse and hyperbolae with a digital plotter, Com- puter J. 25, Vol. 10, No. 3, 1967, 282-289 Sách, tạp chí
Tiêu đề: Algorithm for drawing ellipse and hyperbolae with a digital plotter
[17] M. Pitteway, Algorithms of conic generation, in Fundamental algorithms for computer graphics, Vol. 17, 1967, 219-237 Sách, tạp chí
Tiêu đề: Algorithms of conic generation," in"Fundamental algorithms for computergraphics
[18] V. Pratt, Techniques for conic splines, SIGGRAPH 1985, 151-159 Sách, tạp chí
Tiêu đề: Techniques for conic splines
[19] F. P. Preparata, M. I. Shamos, Computational geometry: an introduction, Springer- Verlag, New York, 1985 Sách, tạp chí
Tiêu đề: Computational geometry: an introduction
[20] W. Richard, Programmer’s guide to PC &amp; PS/2 Video systems, Microsoft Publishing Coproration 1987 Sách, tạp chí
Tiêu đề: Programmer’s guide to PC & PS/2 Video systems

TỪ KHÓA LIÊN QUAN

w