Giáo trình Lý thuyết đồ họa

MC LC  
Chương 1: CÁC YU TCƠ SCA ðꢅ HA  
1.1. Tng quan vꢈ ñꢉ ha máy tính ............................................................................... 1  
1.1.1. Gii thiu vꢂ ñꢃ ha máy tính ................................................................................ 1  
1.1.2. Các kthut ñꢃ ha ................................................................................................ 1  
1.1.2.1. Kthut ñꢃ ha ñim........................................................................................ 1  
1.1.2.2. Kthut ñꢃ ha vector...................................................................................... 2  
1.1.3. ng dng ca ñꢃ ha máy tính............................................................................... 2  
1.1.4. Các lĩnh vc ca ñꢃ ha máy tính .......................................................................... 3  
1.1.5. Tng quan vmt hꢁ ñꢃ ha .................................................................................. 4  
1.2. Màn hình ñꢉ ha...................................................................................................... 6  
1.3. Các khái nim........................................................................................................... 6  
1.3.1. ðim..................................................................................................................... 6  
1.3.2. Các biu din ta ñꢍ ............................................................................................ 8  
1.3.3. ðon thng........................................................................................................... 8  
1.4. Các thut toán vꢍ ñon thng................................................................................. 8  
1.4.1. Bài toán................................................................................................................ 8  
1.4.2. Thut toán DDA................................................................................................... 9  
1.4.3. Thut toán Bresenham ....................................................................................... 10  
1.4.4. Thut toán MidPoint.......................................................................................... 12  
1.5. Thut toán vꢍ ñưng tròn..................................................................................... 14  
1.5.1. Thut toán Bresenham ....................................................................................... 14  
1.5.2. Thut toán MidPoint.......................................................................................... 16  
1.6. Thut toán vEllipse............................................................................................. 17  
1.6.1. Thut toán Bresenham ....................................................................................... 17  
1.6.2. Thut toán MidPoint.......................................................................................... 20  
1.7. Phương pháp vꢍ ñꢉ thhàm s............................................................................. 21  
Bài tp............................................................................................................................ 23  
Chương 2: TÔ MÀU  
2.1. Gii thiu các hmàu............................................................................................ 25  
2.2. Các thut toán tô màu .......................................................................................... 28  
2.2.1. Bài toán.............................................................................................................. 28  
2.2.2. Thut toán xác ñꢑnh P S ................................................................................. 28  
2.2.3. Thut toán tô màu theo dòng quét ..................................................................... 30  
2.2.4. Thut toán tô màu theo vt du loang................................................................ 30  
Bài tp............................................................................................................................ 31  
Chương 3: XÉN HÌNH  
3.1. ðꢔt vn ñꢈ............................................................................................................... 32  
3.2. Xén ñon thng vào vùng hình chnht............................................................. 32  
3.2.1. Cnh ca hình chnht song song vi các trc ta ñꢍ ..................................... 32  
3.2.1.1. Thut toán Cohen – Sutherland ...................................................................... 33  
3.2.1.2. Thut toán chia nhphân................................................................................. 34  
3.2.1.3. Thut toán Liang – Barsky ............................................................................. 35  
3.2.2. Khi cnh ca hình chnht to vi trc hoành mt góc α................................ 36  
3.3. Xén ñon thng vào hình tròn.............................................................................. 37  
3.4. Xén ñưꢐng tròn vào hình chnht...................................................................... 38  
3.5. Xén ña giác vào hình chnht ............................................................................. 39  
Bài tp............................................................................................................................ 40  
Chương 4: CÁC PHÉP BIN ðꢗI  
4.1. Các phép bin ñꢇi trong mt phng..................................................................... 41  
4.1.1. Cơ stoán hc ................................................................................................... 41  
4.1.2. Ví dminh ha .................................................................................................. 43  
4.2. Các phép bin ñꢇi trong không gian.................................................................... 45  
4.2.1. Các htrc ta ñꢍ .............................................................................................. 45  
4.2.2. Các công thc bin ñꢌi ...................................................................................... 46  
4.2.3. Ma trn nghch ñꢗo ............................................................................................ 48  
4.3. Các phép chiu ca vt thtrong không gian lên mt phng ........................... 48  
4.3.1. Phép chiu phi cnh......................................................................................... 48  
4.3.2. Phép chiu song song......................................................................................... 50  
4.4. Công thc ca các phép chiu lên màn hình....................................................... 50  
4.5. Phlc .................................................................................................................... 56  
4.6. Ví dminh ha....................................................................................................... 59  
Bài tp............................................................................................................................ 61  
Chương 5: BIU DIN CÁC ðꢂI TƯꢟNG BA CHIU  
5.1. Mô hình WireFrame.............................................................................................. 63  
5.2. Vmô hình WireFrame vi các phép chiu........................................................ 64  
5.3. Vcác mt toán hc............................................................................................... 65  
Bài tp............................................................................................................................ 68  
Chương 6: THIT Kꢁ ðƯꢡNG VÀ MT CONG BEZIER VÀ B-SPLINE  
6.1. ðưꢐng cong Bezier và mt Bezier........................................................................ 69  
6.1.1. Thut toán Casteljau .......................................................................................... 70  
6.1.2. Dng Bernstein ca ñưꢙng cong Bezier ............................................................ 70  
6.1.3. Dng biu din ma trn ca ñưꢙng Bezier ........................................................ 71  
6.1.4. To và vꢚ ñưng cong Bezier............................................................................ 72  
6.1.5. Các tính cht ca ñưꢙng Bezier......................................................................... 74  
6.1.6. ðánh giá các ñưꢙng cong Bezier....................................................................... 76  
6.2. ðưꢐng cong Spline và B-Spline............................................................................ 77  
6.2.1. ðꢑnh nghĩa.......................................................................................................... 77  
6.2.2. Các tính cht hu ích trong vic thit kcác ñưꢙng cong B-Spline ................. 78  
6.2.3. Thit kcác mt Bezier và B-Spline ................................................................. 79  
6.2.4. Các băng Bezier................................................................................................. 80  
6.2.5. Dán các băng Bezier vi nhau ........................................................................... 81  
6.2.6. Các băng B-Spline ............................................................................................. 81  
Chương 7: KHꢣ ðƯꢡNG VÀ MT KHUT  
7.1. Các khái nim......................................................................................................... 83  
7.2. Các phương pháp khmt khut........................................................................ 85  
7.2.1. Gii thut sp xp theo chiu sâu ...................................................................... 85  
7.2.2. Gii thut BackFace........................................................................................... 88  
7.2.3. Gii thut vùng ñꢁm ñꢍ sâu ............................................................................... 90  
Bài tp.......................................................................................................................... 103  
Chương 8: TO BÓNG VT TH3D  
8.1. Khái nim ............................................................................................................. 104  
8.2. Ngun sáng xung quanh...................................................................................... 104  
8.3. Ngun sáng ñꢑnh hưꢓng ...................................................................................... 105  
8.4. Ngun sáng ñim.................................................................................................. 109  
8.5. Mô hình bóng Gouraud....................................................................................... 110  
Bài tp.......................................................................................................................... 121  
Phlc: MT SCHƯƠNG TRÌNH MINH HA  
I. Các thut toán tô màu ............................................................................................ 122  
II. Các thut toán xén hình........................................................................................ 129  
III. Vcác ñꢒi tưꢩng 3D............................................................................................. 136  
Tài liu tham kho...................................................................................................... 143  
LI Mꢁ ðꢂU  
ðꢀ ha là mt trong nhng lĩnh vc phát trin rt nhanh ca ngành Công nghꢈ  
thông tin. Nó ñưꢉc ng dng rng rãi trong nhiu lĩnh vc khoa hc và công ngh.  
Chng hn như y hc, kin trúc, gii trí... ðꢀ ha máy tính ñã giúp chúng ta thay ñꢑi  
cách cm nhn và sdng máy tính, nó ñã trthành nhng công ctrc quan quan  
trng không ththiu trong ñꢕi sng hng ngày. Vì vy môn “ðꢀ ha” ñã trthành  
mt trong nhng môn hc chính trong các chuyên ngành Công nghthông tin các  
trưꢕng ñꢎi hc.  
Cun sách “Giáo trình lý thuyt ñꢀ ha” ñưꢉc biên son theo sát ni dung  
chương trình ñào to cnhân Công nghthông tin. Ni dung ca giáo trình này  
cung cp mt skin thc cơ bn vlý thuyt và thut toán xây dng các công cꢋ  
ñꢀ ha 2D và 3D. Tꢘ ñó giúp sinh viên có thꢅ ñꢂc lp xây dng nhng thư vin ñꢀ  
ha cho riêng mình và phát trin các phn mm ng dng ñꢀ ha cao hơn.  
Giáo trình ñưꢉc chia làm 8 chương và phn phlc, sau mi chương ñꢌu có  
phn bài tp ñꢅ kim tra kin thc và rèn luyn khnăng lp trình cho bn ñꢁc. ðꢅ  
thun tin cho vic trình bày thut toán mt cách dhiu, các gii thut trong giáo  
trình ñưꢉc vit trên ngôn ng“ta Pascal” và các mã ngun ñưꢉc cài ñꢛt trên Turbo  
Pascal 7.0. Nhm giúp bn ñꢁc bt lúng túng trong quá trình cài ñꢛt các gii thut,  
phn phlc lit kê mt smã ngun cài ñꢛt các thut toán trong các chương. Tuy  
nhiên, bn ñꢁc nên tcài ñꢛt các thut toán phn lý thuyt, nu cm thy khó  
khăn lm mi nên tham kho phn phlc này.  
Chương 1, 2 và 3 trình bày vcác yu tcơ sca ñꢀ ha như: màn hình ñꢀ  
ha, ñim, ñon thng, ñưꢕng tròn, các hmàu và các thut toán tô màu, xén hình ...  
Chương 4 trang bcác kin thc toán hc vcác phép bin ñꢑi trong không gian 2D  
và 3D. Chương 5, 6 và 7 gii thiu các mô hình ñꢀ ha 3D, các gii thut khmt  
khut và to bóng cho vt th... Chương 8 trình bày vphương pháp thit kcác  
ñưꢕng cong Bezier và B-Spline.  
Mc dù ñã rt cgng trong quá trình biên son nhưng chc chn giáo trình  
này vn không thtránh khi nhng thiu sót. Chúng tôi rt mong nhn ñưꢉc nhng  
ý kin ñóng góp ca bn ñꢁc cũng như các bn ñꢀng nghip trong lĩnh vc ðꢀ ha  
ñꢅ giáo trình ngày càng ñưꢉc hoàn thin hơn trong ln tái bn sau. ðꢟa chliên lc:  
Khoa Công nghThông tin, trưꢁng ðꢂi hc Khoa hc Hu.  
ðin thoi: 054.826767. Email: paphuong@hueuni.edu.vn  
Hu, tháng 08 năn 2003  
Các tác giꢄ  
Updatesofts.com  
Ebooks Team  
CHƯƠNG I  
CÁC YU TCƠ SCA ðꢄ HA  
1.1. TNG QUAN Vꢇ ðꢄ HA MÁY TÍNH  
ðꢀ ha máy tính là mt lãnh vc phát trin nhanh nht trong Tin hc. Nó ñưꢆc áp  
dng rng rãi trong nhiu lãnh vc khác nhau thuc vkhoa hc, kngh, y khoa,  
kin trúc và gii trí.  
Thut ngñꢈ ha máy tính (Computer Graphics) ñưꢆc ñꢈ xut bi nhà khoa hc  
ngưꢐi Mtên là William Fetter vào năm 1960 khi ông ñang nghiên cu xây dng mô  
hình bung lái máy bay cho hãng Boeing.  
Các chương trình ñꢀ ha ng dng cho phép chúng ta làm vic vi máy tính mt  
cách thoi mái, tnhiên.  
1.1.1 Gii thiu vꢌ ñꢈ ha máy tính  
ðꢀ ha máy tính là mt ngành khoa hc Tin hc chuyên nghiên cu vcác  
phương pháp kthut ñꢄ có thmô tvà thao tác trên các ñꢓi tưꢆng ca thgii  
thc bng máy tính.  
Vbn cht: ñó là mt quá trình xây dng và phát trin các công ctrên chai  
lĩnh vc phn cng và phn mm htrcho các lp trình viên thit kcác chương  
trình có khnăng ñꢀ ha cao.  
Vi vic mô tdliu thông qua các hình nh và màu sc ña dng ca nó, các  
chương trình ñꢀ ha thưꢐng thu hút ngưꢐi sdng bi tính thân thin, ddùng,... kích  
thích khnăng sáng to và nâng cao năng sut làm vic.  
1.1.2. CÁC KTHUT ðꢄ HA  
Da vào các phương pháp xlý dliu trong hthng, ta phân ra làm hai kthut  
ñꢀ ha:  
1.1.2.1. Kthut ñꢈ ha ñim  
Chương I. Các yu tcơ sca ñꢈ ha  
Nguyên lý ca kthut này như sau: các hình nh ñưꢆc hin ththông qua tng  
pixel (tng mu ri rc). Vi kthut này, chúng ta có thto ra, xóa hoc thay ñꢗi  
thuc tính ca tng pixel ca các ñꢓi tưꢆng. Các hình nh ñưꢆc hin thnhư mt lưꢒi  
ñim ri rc (grid), tng ñim ñꢈu có vtrí xác ñꢚnh ñưꢆc hin thvi mt giá trꢚ  
nguyên biu thmàu sc hoc dsáng ca ñim ñó. Tp hp tt ccác pixel ca grid  
to nên hình nh ca ñꢓi tưꢆng mà ta mun biu din.  
1.1.2.2. Kthut ñꢈ ha vector  
Nguyên lý ca kthut này là xây dng mô hình hình hc (geometrical model) cho  
hình nh ñꢓi tưꢆng, xác ñꢚnh các thuc tính ca mô hình hình hc, sau ñó da trên mô  
hình này ñꢄ thc hin quá trình tô trát (rendering) ñꢄ hin thtng ñim ca mô hình,  
hình nh ca ñꢓi tưꢆng.  
kthut này, chúng ta chlưu trmô hình toán hc ca các thành phn trong mô  
hình hình hc cùng vi các thuc tính tương ng mà không cn lưu li toàn btt cꢌ  
các pixel ca hình nh ñꢓi tưꢆng.  
1.1.3. ng dng ca ñꢈ ha máy tính hin nay  
Ngày nay, ñꢀ ha máy tính ñưꢆc sdng rng rãi trong nhiu lĩnh vc khác  
nhau như: Công nghip, thương mi, qun lý, giáo dc, gii trí,... Sau ñây là mt sꢓ  
ng dng tiêu biu:  
1.1.3.1. To giao din (User Interfaces): như các chương trình ng dng WINDOWS,  
WINWORD, EXCEL ... ñang ñưꢆc ña sngưꢐi sdng ưa chung nhtính thân  
thin, dsdng.  
1.1.3.2. To ra các biu ñꢃ dùng trong thương mi, khoa hc và kthut: Các biu  
ñꢀ ñưꢆc to ra rt ña dng, phong phú bao gm chai chiu ln ba chiu góp phn  
thúc ñꢢy xu hưꢒng phát trin các mô hình dliu htrꢆ ñꢞc lc cho vic phân tích  
thông tin và trgiúp ra quyt ñꢚnh.  
1.1.3.3. Tꢇ ñꢈng hóa văn phòng và chbn ñin t: dùng nhng ng dng ca ñꢀ  
ha ñꢄ in n các tài liu vi nhiu loi dliu khác nhau như: văn bn, biu ñꢀ, ñꢀ thꢚ  
và nhiu loi hình nh khác ...  
1.1.3.4. Thit kvi strgiúp ca máy tính (Computer aided design): Mt trong  
nhng li ích ln nht ca máy tính là trgiúp con ngưꢐi trong vic thit k. Các ng  
2
Chương I. Các yu tcơ sca ñꢈ ha  
dng ñꢀ ha cho phép chúng ta thit kcác thit bcơ khí, ñin, ñin t, ô tô, máy bay,  
... như phn mm AUTOCAD ...  
1.1.3.5. Lĩnh vc gii trí, nghthut: cho phép các ha sĩ to ra các hình nh ngay  
trên màn hình ca máy tính. Ngưꢐi ha sĩ có thtpha màu, trn màu, thc hin mt  
sthao tác: ct, dán, ty, xóa, phóng to, thu nh... như các phn mm PAINTBRUSH,  
CORELDRAW,...  
1.1.3.6. Lĩnh vc bn ñꢃ: xây dng và in n các bn ñꢀ ñꢚa lý. Mt trong nhng ng  
dng hin nay ca ñꢀ ha là hthng thông tin ñꢚa lý (GIS - Geographical Information  
System).  
1.1.4. Các lĩnh vc ca ñꢈ ha máy tính  
1.1.4.1. Các hCAD/CAM (CAD – Computer Aided Design, CAM – Computer  
Aided Manufacture)  
Các hnày xây dng tp hp các công cꢇ ñꢀ ha trgiúp cho vic thit kcác chi  
tit và các hthng khác nhau: các thit bcơ khí, ñin t... Chng hn như phn mm  
Auto Cad ca hng AutoDesk...  
1.1.4.2. Xnh (Image Processing)  
ðây là lĩnh vc xlý các dliu nh trong cuc sng. Sau quá trình xnh, dꢎ  
liu ñꢖu ra là nh ca ñꢓi tưꢆng. Trong quá trình xnh, chúng ta ssdng rt  
nhiu các kthut phc tp: khôi phc nh, xác ñꢚnh biên...  
Ví d: phn mm PhotoShop, Corel Draw, ...  
1.1.4.3. Khoa hc nhn dng (Pattern Recognition)  
Nhn dng là mt lĩnh vc trong kthut xnh. Tnhng mu nh có sn, ta  
phân loi theo cu trúc hoc theo các phương pháp xác ñꢚnh nào ñó và bng các thut  
toán chn lc ñꢄ có thphân tích hay tng hp nh ñã cho thành mt tp hp các nh  
gc, các nh gc này ñưꢆc lưu trong mt thư vin và căn cvào thư vin này ñꢄ nhn  
dng các nh khác.  
Ví d: Phn mm nhn dng chvit (VnDOCR) ca vin Công nghThông tin  
Hà Ni, nhn dng vân tay, nhn dng mt ngưꢐi trong khoa hc hình s...  
1.1.4.4. ðꢈ ha minh ha (Presentation Graphics)  
3
Chương I. Các yu tcơ sca ñꢈ ha  
ðây là lĩnh vc ñꢀ ha bao gm các công ctrgiúp cho vic hin thcác sliu  
thng kê mt cách trc quan thông qua các mu ñꢀ thhoc biu ñꢀ có sn. Chng hn  
như các biu ñꢀ (Chart) trong các phn mm Word, Excel...  
1.1.4.5. Hot hình và nghthut  
Lĩnh vc ñꢀ ha này bao gm các công cgiúp cho các ha sĩ, các nhà thit kꢋ  
phim nh chuyên nghip thc hin các công vic ca mình thông qua các kxo vꢥ  
tranh, hot hình hoc các kxo ñin nh khác...  
Ví d: Phn mm xlý các kxo hot hình như: 3D Animation, 3D Studio  
Max..., phn mm xlý các kxo ñin nh: Adobe Primiere, Cool 3D,...  
1.1.5. Tng quan vmt hꢋ ñꢈ ha (Graphics System)  
1.1.5.1. Hthng ñꢈ ha  
Phn mm ñꢃ ha: Là tp hp các câu lnh ñꢀ ha ca hthng. Các câu lnh lp  
trình dùng cho các thao tác ñꢀ ha không ñưꢆc các ngôn nglp trình thông dng như  
PASCAL, C, ... htr. Thông thưꢐng, nó chcung cp như là mt tp công cthêm  
vào trong ngôn ng. Tp các công cnày dùng ñꢄ to ra các thành phn cơ sca mt  
hình nh ñꢀ ha như: ðim, ñon thng, ñưꢐng tròn, màu sc,... Qua ñó, các nhà lp  
trình phi to ra các chương trình ñꢀ ha có khnăng ng dng cao hơn.  
Phn cng ñꢃ ha: Là các thit bꢚ ñin t: CPU, Card, màn hình, chut, phím...  
giúp cho vic thc hin và phát trin các phn mm ñꢀ ha.  
1.1.5.2. Các thành phn ca mt hthng ñꢈ ha  
Tp hp các công cnày ñưꢆc phân loi da trên nhng công vic trong tng hoàn  
cnh cth: xut, nhp, bin ñꢗi nh, ... bao gm:  
Tp công cto ra nh gc (output primitives): cung cp các công ccơ bn  
nht cho vic xây dng các hình nh. Các nh gc bao gm các chui ký t, các thc  
thhình hc như ñim, ñưꢐng thng, ña giác, ñưꢐng tròn,...  
Tp các công cthay ñꢞi thuc tính (attributes): dùng ñꢄ thay ñꢗi thuc tính ca  
các nh gc. Các thuc tính ca nh gc bao gm màu sc (color), kiu ñưꢐng thng  
(line style), kiu văn bn (text style), mu tô vùng (area filling pattern),...  
4
Chương I. Các yu tcơ sca ñꢈ ha  
Tp các công cthay ñꢞi hquan sát (viewing transformation): Mt khi mà các  
nh gc và các thuc tính ca nó ñưꢆc xác ñꢚnh trong hta ñꢂ thc, ta cn phi chiu  
phn quan sát ca nh sang mt thit bxut cth. Các công cnày cho phép ñꢚnh  
nghĩa các vùng quan sát trên hta ñꢂ thc ñꢄ hin thhình nh ñó.  
Tp các công cphc vcho các thao tác nhp dliu (input operations): Các  
ng dng ñꢀ ha có thsdng nhiu loi thit bnhp khác nhau như bút v, bng,  
chut, ... Chính vì vy, cn xây dng thêm các công cnày ñꢄ ñiu khin và xlý các  
dliu nhp sao cho có hiu qu.  
Mt yêu cu vphn cng không ththiu ñꢝt ra cho các phn mm ñꢀ ha là:  
tính dmang chuyn (portability), có nghĩa là chương trình có thchuyn ñꢗi mt  
cách ddàng gia các kiu phn cng khác nhau. Nu không có schun hóa, các  
chương trình thit kthưꢐng không thchuyn ñꢗi ñꢋn các hthng phn cng khác  
mà không vit li gn như toàn bchương trình.  
Sau nhng nlc ca các tchc chun hóa quc t, mt chun cho vic phát trin  
các phn mm ñꢀ ha ñã ra ñꢐi: ñó là GKS (Graphics Kernel System - Hꢊ ñꢀ ha cơ  
s). Hthng này ban ñꢖu ñưꢆc thit knhư là mt tp các công cꢇ ñꢀ ha hai chiu,  
sau ñó ñưꢆc phát trin ñꢄ mrng trong ñꢀ ha ba chiu.  
Ngoài ra, còn có mt schun ñꢀ ha phbin như:  
CGI (Computer Graphics Interface System): hchun cho các phương pháp  
giao tip vi các thit bngoi vi.  
OPENGL: thư vin ñꢀ ha ca hng Silicon Graphics.  
DIRECTX: thư vin ñꢀ ha ca hng Microsoft.  
1.2. MÀN HÌNH ðꢄ HA  
Mi máy tính ñꢈu có mt CARD dùng ñꢄ qun lý màn hình, gi là Video Adapter  
hay Graphics Adapter. Có nhiu loi adapter như: CGA, MCGA, EGA, VGA,  
Hercules... Các adapter có thlàm vic hai chꢋ ñꢂ: văn bn (Text Mode) và ñꢀ ha  
(Graphics Mode).  
Có nhiu cách ñꢄ khi to các mode ñꢀ ha. Ta có thsdng hàm $00 ngt $10  
ca BIOS vi các Mode sau:  
5
Chương I. Các yu tcơ sca ñꢈ ha  
Mode $12: chꢋ ñꢂ phân gii 640x480x16  
Mode $13: chꢋ ñꢂ phân gii 320x200x256  
Ta có thvit mt thtc ñꢄ khi to chꢋ ñꢂ ñꢀ ha như sau:  
Procedure InitGraph(Mode:Word);  
var Reg:Registers;  
Begin  
reg.ah := 0;  
reg.al := mode;  
intr($10,reg);  
End;  
Các bn có ththam kho thêm các tài liu vlp trình hthng.  
1.3. CÁC KHÁI NIM  
1.3.1. ðim (Pixel)  
Trong các hthng ñꢀ ha, mt ñim ñưꢆc biu thbi các ta ñꢂ bng s.  
Ví du: Trong mt phng, mt ñim là mt cp (x,y)  
Trong không gian ba chiu, mt ñim là bba (x,y,z)  
Trên màn hình ca máy tính, mt ñim là mt vtrí trong vùng nhmàn hình dùng  
ñꢄ lưu trcác thông tin vꢈ ñꢂ sáng ca ñim tương ng trên màn hình.  
Sꢓ ñim vtrên màn hình ñưꢆc gi là ñꢈ phân gii ca màn hình (320x200,  
480x640, 1024x1024,...)  
Cách hin ththông tin lên màn hình ñꢈ ha:  
Vùng ñꢊm màn hình hay còn gi là bnhhin thꢚ ñưꢆc bt ñꢖu tꢛ ñꢚa chꢡ  
A000h:$0000h. Vì vy, ñꢄ hin ththông tin ra màn hình thì ta chcn ñưa thông tin  
vào vùng ñꢊm màn hình bt ñꢖu tꢛ ña chtrên là ñưꢆc.  
Có nhiu cách ñꢄ vmt ñim ra màn hình: có thdùng các phc vca BIOS hoc  
cũng có thtruy xut trc tip vào vùng nhmàn hình.  
Nu dùng phc vca BIOS, ta dùng hàm $0C ngt $10:  
Procedure PutPixel(Col,Row:Word; Color:Byte);  
Var reg:Registers;  
Begin  
reg.ah:=$0C;  
reg.al:=Color;  
6
Chương I. Các yu tcơ sca ñꢈ ha  
reg.bh:=0;  
reg.cx:=Col;  
reg.dx:=Row;  
Intr($10,reg);  
End;  
Nu mun truy xut trc tip vào vùng ñꢊm màn hình: Gismt ñim (x,y)  
ñưꢆc vtrên màn hình vi ñꢂ phân gii 320x200x256 (mode 13h), ñim ñó sꢥ ñưꢆc  
ñꢚnh vtrong vùng ñꢊm bt ñꢖu tꢛ ñꢚa chsegment A000h và ñꢚa choffset ñưꢆc tính  
theo công thc: Offset = y*320 + x.  
Ta có thvit thtc như sau:  
Procedure PutPixel(x,y:Word; Color:Byte);  
Var Offset:Word;  
Begin  
Offset:=(y shl 8) + (y shl 6) + x;  
Mem[$A000:Offset]:=Color;  
End;  
1.3.2. Các biu din ta ñꢟ  
Hu ht các chương trình ñꢀ ha ñꢈu dùng hta ñꢂ Decartes (Hình 1.1).  
Ta bin ñꢗi:  
O
MaxX  
Y
Y
O
X
X
MaxY  
Ta ñꢂ thgii thc  
Ta ñꢂ thit bmàn hình.  
Hình 1.1  
1.3.3. ðon thng  
Trong các hthng ñꢀ ha, các ñon thng ñưꢆc biu thbi vic “tô” ñon thng  
bt ñꢖu tꢛ ñim ñꢖu mút này kéo dài cho ñꢋn khi gp ñim ñꢖu mút kia.  
1.4. CÁC THUT TOÁN Vꢥ ðON THNG  
7
Chương I. Các yu tcơ sca ñꢈ ha  
1.4.1. Bài toán: Vꢥ ñon thng ñi qua 2 ñim A(x1,y1) và B(x2,y2)  
* Trưꢐng hp x1=x2 hoc y1=y2: rt ñơn gin.  
* Trưꢐng hp ñưꢐng thng có hsgóc m:  
Ý tưꢀng:  
Vì các Pixel ñưꢆc vꢥ ꢏ các vtrí nguyên nên ñưꢐng thng ñưꢆc vging như hình  
bc thang (do làm tròn).  
Vn ñꢈ ñꢝt ra là chn các ta ñꢂ nguyên gn vi ñưꢐng thng nht.  
1.4.2. Thut toán DDA (Digital differential analyzer)  
Xét ñưꢐng thng có hsgóc 0<m1(gisꢙ ñim ñꢖu A nm bên trái và ñim cui  
B nm bên phi). Nu ta chn x=1và tính giá try ktip như sau:  
yk+1 = yk + y = yk + m.x  
= yk + m  
Vi hsgóc m>1: ta hoán ñꢗi vai trò ca x,y cho nhau. Nu chn y=1 thì:  
xk+1 = xk + 1/m  
Tương t, nu ñim B nm bên trái và A nm bên phi thì:  
yk+1 = yk - m  
(0<m1, x= -1)  
(m>1, y= -1)  
xk+1 = xk - 1/m  
Tóm li: Ta có thut toán vꢥ ñưꢐng thng DDA như sau:  
Nhp A(x1,y1) B(x2,y2)  
Tính x = x2 - x1 y = y2 - y1  
Khi to các giá tr:  
Step = Max(|x| , |y|)  
IncX = x/Step;  
x = x1; y = y1;  
IncY = y/Step; {bưꢒc tăng khi v}  
{Chn ñim vꢥ ñꢖu tiên}  
Vꢥ ñim (x,y);  
Cho i chy t1 ñꢋn Step:  
x = x + IncX;  
y = y + IncY;  
Vꢥ ñim (Round(x),Round(y))  
Tꢛ ñó ta có thtc vꢥ ñon thng theo thut toán DDA như sau:  
Procedure DDALine(x1,y1,x2,y2:Integer);  
var dx,dy,step,i:integer;  
8
Chương I. Các yu tcơ sca ñꢈ ha  
xInc,yInc,x,y:real;  
Begin  
dx:=x2-x1; dy:=y2-y1;  
If abs(dx)>abs(dy) Then step:=abs(dx)  
else step:=abs(dy);  
xInc:=dx/step;  
yInc:=dy/step;  
x:=x1;  
y:=y1;  
Putpixel(round(x),round(y),15);  
for i:=1 to step do  
Begin  
x:=x+xInc;  
y:=y+yInc;  
Putpixel(round(x),round(y),15);  
End;  
End;  
1.4.3. Thut toán Bresenham  
Phương trình ñưꢐng thng có thphát  
biu dưꢒi dng: y = m.x + b (1)  
Phương trình ñưꢐng thng qua 2 ñim:  
yi+  
1
y
x x1  
y y1  
=
(*)  
x2 x1  
y2 y1  
yi  
ðꢝt x = x2 - x1  
y = y2 - y1  
y  
xi  
xi+1  
Hình 1.2  
y  
x  
(*)  
y = x.  
+ y1 - x1.  
x  
y  
Suy ra m =  
nên y = m. x  
(2)  
(3)  
x  
b = y1 - m.x1  
Ta chxét trưꢐng hp hsgóc 0<m<1.  
Gisꢙ ñim (xi,yi) ñã ñưꢆc v. Ta phi chn ñim ktip là:  
9
Chương I. Các yu tcơ sca ñꢈ ha  
(xi + 1,yi) hoc (xi +1,yi +1) (Xem hình 1.2)  
Xét khong cách gia 2 ñim chn vi ñim nm trên ñưꢐng thc. Nu khong  
cách nào bé hơn thì ta ly ñim ñó.  
ðꢝt:  
d1 = y - yi = m.(xi +1) + b - yi  
d2 = (yi +1) - y = yi + 1 - m.(xi + 1) - b  
Suy ra:  
d1 - d2 = 2m.(xi + 1) - 2yi + 2b - 1  
y  
= 2.  
.(xi + 1) - 2yi + 2b - 1  
x  
x(d1 - d2) = 2y.xi - 2x.yi + 2y + x.(2b - 1)  
ðꢝt pi = x(d1 - d2) và C = 2y + x.(2b - 1)  
thì pi = 2y.xi - 2x.yi + C  
(4)  
pi+1 = 2y.xi+1 - 2x.yi+1 + C  
Suy ra:  
pi+1 - pi = 2y(xi+1 - xi) - 2x(yi - yi+1)  
= 2y - 2x(yi+1 - yi)  
(5)  
( vì xi+1 - xi = 1 )  
* Nhn xét:  
. Nu pi < 0: Chn yi+1 = yi T(5) pi+1 = pi + 2y.  
(d1<d2)  
. Nu pi 0: Chn yi+1 = yi + 1 T(5) pi+1 = pi + 2y - 2x. (d1>d2)  
Vi ñim mút ñꢖu tiên, theo (4) ta có:  
p1 = 2y.x1 - 2x.y1 + 2y + x[2.(y1 - m.x1) - 1] = 2y - x  
Tꢛ ñó, ta có thtóm tt thut toán vꢥ ñưꢐng thng theo Bresenham cho trưꢐng hp hꢊ  
sgóc 0<m<1 như sau:  
Bưꢊc 1: Nhp các ñim ñꢖu mút. ðim ñꢖu mút bên trái cha ta ñꢂ (x1,y1), ñim  
ñꢖu mút bên phi cha ta ñꢂ (x2,y2).  
Bưꢊc 2: ðim ñưꢆc chn ñꢄ vꢥ ñꢖu tiên là (x1,y1).  
Bưꢊc 3: Tính x = |x2 - x1| , y = |y2 - y1| và P1 = 2y - x  
Nu pi < 0 thì ñim ktip là (xi + 1,yi)  
Ngưꢆc li: ñim ktip là (xi + 1,yi + 1)  
10  
Chương I. Các yu tcơ sca ñꢈ ha  
Bưꢊc 4: Tip tc tăng x lên 1 Pixel. vtrí xi +1, ta tính:  
pi+1 = pi + 2y nu pi < 0  
pi+1 = pi + 2.( y - x) nu pi 0  
Nu pi+1 < 0 thì ta chn toꢘ ñꢂ y ktip là yi+1  
Ngưꢆc li thì ta chn yi+1 +1  
Bưꢊc 5: Lp li bưꢒc 4 cho ñꢋn khi x = x2.  
Sau ñây là thtc cài ñꢝt thut toán:  
Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1}  
var dx,dy,x,y,p,c1,c2,xMax:integer;  
Begin  
dx:=abs(x1-x2);  
dy:=abs(y1-y2);  
c1:=2*dy;  
c2:=2*(dy-dx);  
p:=2*dy-dx;  
if x1>x2 then  
begin  
x:=x2; y:=y2; xMax:=x1;  
end  
else  
begin  
x:=x1;y:=y1;xMax:=x2;  
end;  
putpixel(x,y,red);  
while x<xMax do  
begin  
x:=x+1;  
if p<0 then p:=p+c1  
else begin  
y:=y+1;  
p:=p+c2;  
end;  
11  
Chương I. Các yu tcơ sca ñꢈ ha  
putpixel(x,y,red);  
end;  
end;  
1.4.4. Thut toán MidPoint  
Ta chxét trưꢐng hp hsgóc 0<m<1.  
Thut toán này ñưa ra cách chn ñim S(xi+1,yi) hay P(xi+1,yi+1) bng cách so  
sánh ñim thc Q(xi+1,y) vi ñim M (trung ñim ca S và P).  
Nu ñim Q nm dưꢒi ñim M thì chn ñim S  
Ngưꢆc li, chn ñim P. (Xem hình 1.3)  
Ta có dng tng quát ca phương trình ñưꢐng thng:  
Ax + By + C = 0  
vi A = y2 – y1 , B = –(x2 – x1) ,  
C = x2.y1 – x1.y2  
ðꢝt F(x,y) = Ax + By + C, ta có nhn xét:  
< 0 nu (x,y) nm phía trên ñưꢐng thng  
F(x,y)  
= 0 nu (x,y) thuc vꢈ ñưng thng  
> 0 nu (x,y) nm phía dưꢒi ñưꢐng thng  
Lúc này, vic chn các ñim S hay P ñưꢆc ñưa vvic xét du ca:  
1
pi = F(M) = F(xi + 1,yi + )  
2
Nu pi < 0 M nm trên ñon  
thng Q nm dưꢒi M Chn S  
P
yi+  
Nu pi 0 M nm dưꢒi ñon  
Q
M
1
thng Q nm trên M Chn P  
Mt khác:  
S
yi  
1
pi = F(xi + 1,yi + )  
2
xi  
x +1  
1
pi+1 = F(xi+1 + 1,yi+1 + )  
2
Hình 1.3  
nên  
1
1
pi+1 - pi = F(xi+1 + 1,yi+1 + ) - F(xi + 1,yi + )  
2
2
12  
Chương I. Các yu tcơ sca ñꢈ ha  
1
1
= A(xi+1+1) + B(yi+1 + ) + C - A(xi+1) - B(yi + ) - C  
2
2
= A(xi+1 - xi) + B(yi+1 - yi)  
= A + B(yi+1 - yi) (vì xi+1 - xi =1)  
Suy ra:  
pi+1 = pi + A + B(yi+1 - yi)  
*Nhn xét:  
. Nu pi < 0: Chn ñim S: yi+1 = yi  
(*)  
T(*) suy ra pi+1 = pi + A  
. Nu pi 0: Chn ñim P: yi+1 = yi + 1 T(*) suy ra pi+1 = pi + A + B  
Vi ñim mút ñꢖu tiên, ta có:  
1
1
p1 = F(x1 + 1,y1 + ) = A(x1+1) + B(y1 + ) + C  
2
2
B
B
= Ax1 + Bx1 + C + A +  
= A +  
(vì Ax1 + Bx1 + C = 0)  
2
2
Thut toán MidPoint cho kt qutương tnhư thut toán Bresenham.  
1.5. THUT TOÁN Vꢥ ðƯꢨNG TRÒN  
Xét ñưꢐng tròn (C) tâm O(xc,yc) bán kính R.  
(-  
y,x)  
(y,x  
)
Phương trình tng quát ca ñưꢐng tròn có dng:  
(x - xc)2 + (y - yc)2 = R2  
(*)  
(1)  
(-  
x,y)  
(x,y  
)
y = yc ± R2 (x xC )2  
(x,-  
y)  
(-x,-  
y)  
ðꢄ ñơn gin thut toán, ñꢖu tiên ta xét ñưꢐng  
tròn có tâm gc ta ñꢂ (xc=0 và yc=0).  
* Ý tưꢀng:  
(-y,-  
x)  
(
y,-  
Hình  
1.4  
Do tính ñꢓi xng ca ñưꢐng tròn nên nu ñim  
(x,y) (C) thì các ñim (y,x), (-y,x), (-x,y), (-x,-y), (-y,-x), (y,-x), (x,-y) cũng (C) (Hình 1.4)  
Vì vy, ta chcn vmt phn tám cung tròn ri ly ñꢓi xng qua gc O và 2 trc toꢘ  
ñꢂ thì ta có ñưꢆc toàn bꢂ ñưꢐng tròn.  
1.5.1. Thut toán Bresenham  
Gis(xi,yi) ñã vꢥ ñưꢆc. Cn chn ñim ktip là (xi +1,yi) hoc (xi +1,yi -1)  
(Hình 1.5)  
Tphương trình: x2 + y2 = R2  
ta tính ñưꢆc giá try thc ng vi xi +1 là:  
13  
Chương I. Các yu tcơ sca ñꢈ ha  
y2 = R2 - (xi +1)2  
ðꢝt: d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2  
d2 = y2 - (yi - 1)2 = R2 - (xi + 1)2 - (yi - 1)2  
Suy ra:  
pi = d1 - d2 = 2.(xi + 1)2 + yi2 + (yi - 1)2 - 2R2  
pi+1 = 2.(xi+1 + 1)2 + y2i+1 + (yi+1 - 1)2 - 2R2  
T(2) và (3) ta có:  
yi  
y
yi-  
1
(2)  
(3)  
xi  
x +1  
pi+1 - pi = 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi)  
pi+1 = pi + 4xi + 6 + 2.(y2i+1 - yi2) - 2.(yi+1 - yi)  
Hình  
1.5  
(4)  
* Nhn xét:  
Nu pi < 0: chn yi+1 = yi  
(4) pi+1 = pi + 4xi + 6  
Nu pi 0: chn yi+1 = yi - 1 (4) pi+1 = pi + 4.(xi - yi) + 10  
Ta chn ñim ñꢖu tiên cn v(0,R), theo (2) ta có: p1 = 3 - 2R  
Tóm li: Ta có thut toán vꢥ ñưꢐng tròn:  
Bưꢊc 1: Chn ñim ñꢖu cn v(x1,y1) = (0,R)  
Bưꢊc 2: Tính P ñꢖu tiên: p1 = 3 - 2R  
Nu p < 0: chn ñim ktip là (xi +1,yi). Ngưꢆc li chn ñim (xi + 1,yi - 1)  
Bưꢊc 3: x:=x + 1, tính li p:  
Nu pi < 0: pi+1 = pi + 4xi + 6. Ngưꢆc li: pi+1 = pi + 4.(xi - yi) + 10  
Khi ñó:  
Nu pi+1 < 0: chn ñim ktip là (xi +1,yi+1). Ngưꢆc li chn ñim (xi+1,yi+1-1)  
Bưꢊc 4: Lp li bưꢒc 3 cho ñꢋn khi x = y.  
Sau ñây là thtc ñꢄ cài ñꢝt thut toán:  
Procedure Circle(x0,y0,r:Integer);  
Var p,x,y:Integer;  
Procedure VeDiem;  
Begin  
PutPixel( x0 + x , y0 + y , color);  
PutPixel( x0 - x , y0 + y , color);  
PutPixel( x0 + x , y0 - y , color);  
PutPixel( x0 - x , y0 - y , color);  
14  
Chương I. Các yu tcơ sca ñꢈ ha  
PutPixel( x0 + y , y0 + x , color);  
PutPixel( x0 - y , y0 + x , color);  
PutPixel( x0 + y , y0 - x , color);  
PutPixel( x0 - y , y0 - x , color);  
End;  
Begin  
x:=0; y:=r;  
p:=3 - 2*r;  
While x<=y do  
Begin  
VeDiem;  
If p<0 then p:=p + 4*x + 6  
Else  
Begin  
p:=p + 4*(x-y) + 10;  
y:=y-1;  
End;  
x:=x+1;  
End;  
End;  
1.5.2. Thut toán MidPoint  
Tphương trình ñưꢐng tròn: x2 + y2 = R2  
ðꢝt F(x,y) = x2 + y2 - R2 ,ta có:  
< 0 nu (x,y) trong ñưꢐng tròn  
S
yi  
M
Q
P
yi-  
1
F(x,y)  
= 0 nu (x,y) trên ñưꢐng tròn  
> 0 nu (x,y) ngoàiñưꢐng tròn  
xi  
xi+1  
Lúc này, vic chn các ñim S(xi+1,yi) hay  
P(xi+1,yi-1) ñưꢆc ñưa vvic xét du ca:  
Hình  
1.6  
1
pi = F(M) = F(xi + 1,yi - ) (Hình 1.6)  
2
Nu pi < 0 M nm trong ñưꢐng tròn Q gn S hơn Chn S  
Nu pi 0 M nm ngoài ñưꢐng tròn Q gn P hơn Chn P  
15  
Tải về để xem bản đầy đủ
pdf 146 trang Thùy Anh 27/04/2022 7820
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lý thuyết đồ họa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_ly_thuyet_do_hoa.pdf
  • rarDo hoc may tinh-GD Tu xa.rar