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 2D - ˆ ` HO.A M´AY T´INH I O
Pha.m Tiˆe´n So.n
D - `a La.t, 2005
Trang 4Mu.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 52.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 63.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 74.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 8L` 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 9Gi´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 10Chu.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 11d¯ˆ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 12su.˙’ 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 141.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 16D- ˆ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 17Nhu.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 18void 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 iD — M (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 21khi 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 = ymin−1
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`ng√2 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 22yyyyyyyyyyD- 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 231.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 24putpixel(-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 25H`ı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 264 [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 28mˆ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 29C´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 301 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 31H`ı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 32Do 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 34H`ı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 35H`ı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 36X´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 38Nhˆ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 39d > 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 40th`ı 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