Luận văn Đồ họa trong máy tính

Trong giải thuật tô màu vùng đối tượng và trong những quá trình xử lý đồ họa khác, chúng

ta thường xuyên cần phải xác định vùng nằm bên trong đối tượng. Cho đến hiện tại thì

chúng ta cũng chỉ bàn đến việc tô màu cho các đa giác có hình dạng chuẩn. Tuy nhiên

trong hình học cơ bản, đa giác thường được định nghĩa theo dạng không có sự tự giao nhau

giữa các cạnh. Ví dụ như đa giác chỉ đơn giản là các tam giác, tứ giác, lục giác hay bát

giác. Các cạnh thành phần của các đối tương này chỉ giao nhau tại các đỉnh của đa giác và

không có điểm chung nào nữa. Sự nhận biết các vùng nằm bên trong các đa giác chuẩn là

một quá trình không mấy khó khăn. Nhưng trong phần lớn các ứng dụng đồ họa, chúng ta

có thể chỉ ra dãy liên tục các đỉnh của vùng tô màu kể cả các đỉnh là giao điểm của các

cạnh và như thế rất khó xác định đâu là các điểm nằm bên trong và đâu là các điểm nằm

bên ngoài đối tượng. Các phần mềm đồ họa thường dùng nguyên tắc chẵn lẻ hay nguyên

tắc hệ số xoắn khác không để nhận biết các vùng bên trong này.

Chúng ta sẽ sử dụng nguyên tắc tính chẳn lẽ bằng nguyên lý vẽ một đường thẳng từ

một điểm bất kỳ P đến một điểm cách xa nằm bên ngoài tọa độ đối tượng bằng cách đếm

số cạnh cắt ngang đường quét. Nếu số cạnh cắt ngang đường quét là số lẻ thì P là điểm

nằm bên trong, ngược lại thì P là điểm nằm bên ngoài. Để có thể đếm số cạnh chính xác,

chúng ta phải đảm bảo rằng đường thẳng mà chúng ta chọn không được đi qua bất kỳ đỉnh

nào của đa giác. Giải thuật tô màu theo phương pháp đường thẳng quét nói trên là một ví

dụ của giải thuật tô màu theo phương pháp chẵn lẻ.

 

pdf117 trang | Chia sẻ: netpro | Lượt xem: 1626 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Luận văn Đồ họa trong máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1, 1 - Laàn thöù ba cuõng veõ laàn löôït nhöng moãi laàn veõ boû qua hai ñænh 1, 4, 7,…, N-2, 1 Cöù nhö theá, quaù trình ñöôïc laëp laïi vôùi (N-1)/2 laàn thì keát thuùc. Cung C Trong ñoà hoïa maùy tính, vôùi söï trôï giuùp cuûa maùy tính vaø caùc giaûi thuaät ñeä quy, thöïc teá chuùng ta ñaõ taïo ra ñöôïc nhöõng hoï ñöôøng cong gaây ra söï loâi cuoán raát ñaëc bieät nhôø hieäu öùng hình hoïc cuûa noù. Beân caïnh ñoù, vieäc xaây döïng caùc hoï ñöôøng cong naøy cuõng töông ñoái ñôn giaûn vaø deã hieåu. Trong phaïm vi cuûa ñoà aùn thöïc taäp toát nghieäp naøy, chuùng ta seõ khaûo saùt hoï ñöôøng cong C. Ñöôøng cong C ñöôïc xaây döïng treân cô sôû thay theá moät ñoaïn thaúng baèng moät ñöôøng gaáp khuùc taïo ra bôûi hai ñoaïn thaúng ngaén hôn hôïp vôùi nhau moät goùc laø π/2. Hai ñoaïn thaúng naøy coù ñoä daøi baèng 1/√2 laàn ñoaïn thaúng caáp cha cuûa chuùng. Ñeã coù theå veõ ñöôïc caùc ñoaïn thaúng caáp hai töø ñoaïn thaúng caáp moät, ta baét ñaàu ôû moät ñaàu ñoaïn thaúng caáp moät naøy veõ ñoaïn thaúng caáp hai daøi baèng 1/√2 laàn ñoaïn thaúng caáp moät vaø hôïp vôùi ñoaïn thaúng caáp moät goùc π/4, sau ñoù töø vò trí hieän haønh (ñaàu cuoái cuûa ñoaïn thaúng caáp hai thöù nhaát), ta veõ ñoaïn thaúng thöù hai cuõng coù chieàu daøi töông töï vaø hôïp vôùi ñoaïn thaúng caáp hai vöaø veõ moät goùc - (π/2). Cöù nhö theá töø vieäc thay theá 2 ñoaïn thaúng caáp n cho moãi ñoaïn thaúng caán n-1 ta ñöôïc moät ñöôøng cong coù hình chöõ C raát ñeïp (soá caáp laø töø 15 trôû leân thì hình aûnh cung C hieän ra raát roõ). Cung Roàng Töông töï nhö cung C, cung roàng laø vieäc thay theá moät ñoaïn thaúng cô sôû baèng hai ñoaïn thaúng caáp con nhöng vieäc thay coù moät khaùc bieät ôû choã chieàu daøi cuûa ñoaïn thaúng thöø hai. Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 40 Toùm Taét Nhö vaäy, chuùng ta ñaõ laàn löôït tieán haønh khaûo saùt caùc cô sôû toaùn hoïc cuûa nhöõng ñoái töôïng cô sôû trong ñoà hoïa maùy tính. Trong thöïc teá thì caùc ñöôøng gaáp khuùc, caùc ña giaùc, cung C, cung roàng khoâng phaûi laø ñoái töôïng cô sôû cuûa ñoà hoïa, nhöng chuùng ta cuõng tieán haønh khaûo saùt ôû ñaây bôûi vì chuùng laø nhöõng ñoái töôïng thöôøng xuyeân ñöôïc söû duïng ñeå taïo ra heä caùc maãu veõ (patterns) laø heä maø chuùng ta seõ tieán haønh hieä thöïc baèng phaàn meàm. Hôn nöõa, trong khi khaûo saùt lyù thuyeát, ñeã coù theå hieåu ñöôïc caën keõ baûn chaát cuûa caùc giaûi thuaät, chuùng ta cuõng ñaõ tieán haønh khaûo saùt raát nhieàu caùc giaûi thuaät khaùc öùng vôùi töøng loaïi ñoái töôïng moät, nhöng trong thöïc teá khi hieän thöïc baèng phaàn meàm, treân cô sôû caáu hình heä thoáng maø chuùng ta ñang söû duïng, treân cô sôû quõy thôøi gian hieän coù cuûa chuùng ta vaø treân cô sôû hieän thöïc cuûa ngoân ngöõ maø ta ñang söû duïng thì vieäc löïa choïn giaûi thuaät naøo hôïp lyù nhaát laø tuøy thuoäc vaøo kyõ naêng cuûa ngöôøi laäp trình. Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 41 Chöông 4 CAÙC GIAÛI THUAÄT TOÂ MAØU Nhö chuùng ta ñaõ bieát, trong haàu heát taát caû caùc heä ñoà hoïa hieän nay thì beân caïnh vieäc veõ ra ñöôïc caùc ñoái töôïng hình hoïc thì vieäc toâ maøu chuùng cuõng ñoùng moät vai troø quan troïng khoâng keùm. Trong soá caùc ñoái töôïng caàn toâ maøu thì coù nhöõng nhoùm ñoái töôïng laø coù theå tieán haønh toâ maøu ñöôïc vaø cuõng coù nhöõng ñoái töôïng khoâng theå toâ maøu do hình daïng phöùc taïp cuûa noù, vaø trong taát caû caùc ñoái töôïng noùi treân thì vieäc toâ maøu moät ña giaùc coù leõ laø ñôn giaûn hôn caû do caùc ñöôøng bao cuûa ña giaùc laø tuyeán tính. Trong heä thoáng rôøi raïc, coù hai phöông thöùc ñöôïc duøng ñeå toâ maøu ñoái töôïng. Phöông phaùp toâ maøu thöù nhaát laø xaùc ñònh phaàn truøng nhau giöõa dieän tích caàn toâ vaø ñöôøng thaúng queùt qua phaàn dieän tích naøy. Moät phöông phaùp toâ maøu khaùc laø baét ñaàu töø moät vò trí beân trong cho tröôùc, chuùng ta seõ toâ maøu töø ñieåm naøy veà phiaù ngoaøi cho ñeán khi ñuïng phaûi phaàn ñöôøng bao cuûa ñoái töôïng ñang toâ.. Phöông phaùp toâ maøu duøng ñöông thaúng queùt thöôøng ñöôïc ñi keøm vôùi haàu heát taát caû caùc goùi phaàn meàm ñoà hoïa thoâng thöôøng vaø noù ñöôïc aùp duïng ñeå toâ maøu cho haàu heát caùc ñoái töôïng hình hoïc thoâng duïng nhö ña giaùc, hình troøn, ellipse vaø nhöõng ñöôøng cong ñôn giaûn. Coøn phöông phaùp toâ maøu baèng vieäc baét ñaàu töø moät ñieåm beân trong vaät theå caàn toâ tieán haønh toâ cho ñeán khi gaëp phaûi ñöôøng bao cuûa vaät theå thì thöôøng ñöôïc söû duïng ñeå toâ maøu cho caùc ñoái töôïng hình hoïc phöùc taïp hay ñöôïc duøng trong caùc heä thoáng hoäi hoïa. Giaûi Thuaät Toâ Maøu Moät Ña Giaùc Baèng Ñöôøng Thaúng Queùt Hình veõ 3-35 minh hoïa cho caùch thöùc toâ maøu baèng ñöôøng thaúng queùt. ÖÙng vôùi moãi ñöôøng thaúng queùt qua ña giaùc, giaûi thuaät toâ maøu seõ xaùc ñònh giao ñieåm giöõa ñöôøng thaúng vaø ñöôøng bao cuûa ña giaùc. Nhöõng giao ñieåm naøy sau ñoù seõ ñöôïc saép xeáp theo thöù töï töø traùi sang phaûi, vaø moät vò trí töông öùng trong vuøng ñeäm naèm giöõa moãi caëp giao ñieåm seõ ñöôïc caøi ñaët giaù trò maøu seõ ñöôïc toâ. Trong ví duï cuû hình veõ 3-35, vò trí cuûa boán giao ñieåm vôùi ña giaùc ñònh nghóa neân hai khoaûng chöùa caùc ñieåm naèm beân trong töø x = 10 ñeán x = 14 vaø töø x = 18 ñeán x = 24. Trong moät vaøi tröôøng hôïp, tung ñoä cuûa caùc giao ñieåm giöõa ñöôøng thaúng vaø ña giaùc cuõng 10 14 18 24 x y Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 42 caàn phaûi ñöôïc löu laïi moät caùch ñaëc bieät. Ví duï nhö trong tröôøng hôïp Hình 3-35 ñöôøng thaúng caét ngang ña giaùc taïi ñænh cuûa ña giaùc Caùc ñieåm beân trong khi thì vò trí naøy seõ phaûi ñöôïc löu laïi trong danh saùch caùc ñöôûng thaúng queùt qua phaàn ñieåm giao nhau ñeán hai laàn. Hình veõ 3- 36 chæ ra hai dieän tích cuûa ña giaùc ñöôøng thaúng taïi hai vò trí y va y' caét ña giaùc taïi caùc ñænh cuûa ña giaùc. Ñöôøng thaèng y ñi qua 5 caïnh cuûa ña giaùc. Tuy nhieân, ñöôøng thaúng y' laïi coù soá giao ñieåm vôùi ña giaùc laø soá chaün maëc daàu noù cuõng ñi qua moät ñænh cuûa ña giaùc. Caùc giao ñieåm doïc theo ñöôøng thaúng y' coù theå nhaän bieát ñöôïc deã daøng nhöõng ñieåm thuoäc beân trong ña giaùc nhöng vôùi ñöôøng thaúng y, chuùng ta caàn phaûi laøm theâm moät soá coâng vieäc môùi coù theå xaùc ñònh caùc ñieåm naèm beân trong ña giaùc. Söï khaùc bieät veà maët hình hoïc giöõa ñöôøng thaúng y vaø y' trong hình 3-36 seõ ñöôïc nhaän bieát baèng caùch chuù yù ñeán caùc vò trí giao nhau giöõa caùc caïnh vaø caùc ñöôøng thaúng. Ñoái vôùi ñöôøng y, hai caïnh giao vôùi ñöôøng thaúng coù chung moät ñænh naèm veà hai phiaù so vôùi ñöôøng thaúng ñoù, nhöng vôùi ñöôøng thaúng y', hai caïnh giao nhau vôùi ñöôøng thaúng coù chung moät ñænh laïi naèm cuøng veà moät phiaù so vôùi ñöôøngthaúng ñoù. Nhö theá, caùc ñænh ñoøi hoûi söï xöû lyù theâm laø caùc ñænh coù caïnh noái ñeán noù giao vôùi ñöôøng thaúng naèm veà hai phiaù cuûa ñöôøng thaúng ñoù. Chuùng ta coù theå phaùt hieän ra nhöõng ñænh naøy baèng caùch duyeät heát toaøn boä ña giaùc hoaëc theo chieàu kim ñoàng hoà hoaëc ngöôïc chieàu kim ñoàng hoà vaø quan saùt söï thay ñoåi töông öùng theo toïa ñoä y cuûa caùc ñænh khi chuùng ta di chuyeån töø caïnh naøy sang caïnh keá tieáp. Neáu giaù trò y cuûa ñænh chung cho hai caïnh lieân tuïc laø taêng daàn hay giaûm daàn ñeàu thì chuùng ta chæ caàn xem nhö ñænh naøy chæ laø moät giao ñieåm giöõa ñöôûng thaúng vaø ña giaùc. Ngöôïc laïi, neáu ñænh chung laø cöïc ñieåm (cöïc ñaïi hay cöïc tieåu) trong vuøng laân caän cuûa ñöôøng bao ña giaùc thì giao ñieåm giöõa hai caïnh vôùi ñöôøng thaúng thoâng qua ñieåm naøy seõ ñöôïc theâm vaøo danh saùch giao ñieåm hai laàn. Ñöôøng thaúng queùt y' Ñöôøng thaúng queùt y 1 1 2 1 2 1 1 Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 43 Hình 3-36 Caùc giao ñieåm doïc theo ñöôøng thaúng queùt giao vôùi ña giaùc taïi caùc ñænh cuûa ña giaùc. Ñuôøng thaúng y coù soá giao ñieåm laø soá chaün nhöng ñöôøng thaúng y’ coù soá giao ñieåm laø leõ nhöng vaãn ñöôïc ñaùnh daáu laø moät caëp ñeå xaùc ñònh ñuùng khoaûng taäp caùc ñieåm naèm beân trong ña giaùc Moät caùch ñeå coù theå traû lôøi chính xaùc caâu hoûi laø khi naøo thì chuùng ta ñeám moät ñænh laø moät giao ñieåm vaø khi naøo ta ñeám ñænh laø hai giao ñieåm laø tieán haønh thu ngaén caùc caïnh cuûa ña giaùc ñeå taùch nhöõng ñænh naøy thaønh caùc ñænh seõ ñöôïc ñeám chæ moät laàn. Chuùng ta tieán haønh xöû lyù caùc caïnh khoâng naèm theo phöông ngang doïc theo ñöôøng bao ña giaùc theo moät thöù töï naøo ñoù, hoaëc laø theo chieàu kim ñoàng hoà hoaëc laø ngöôïc chieàu kim ñoàng hoà. Vaø vôùi moãi caïnh, chuùng ta seõ tieán haønh kieåm tra xem caïnh ñang xöû lyù vaø caïnh khoâng naèm theo phöông ngang keá tieáp coù giaù trò toïa ñoä cuûa ñieåm chung theo truïc y laø taêng hay giaûm ñeàu hay khoâng. Neáu coù thì caïnh thaáp hôn seõ ñöôïc thu ngaén ñeå ñaûm baûo laø chæ coù moät giao ñieåm ñöôïc phaùt sinh cho ñöôøng thaúng queùt khi ñi qua ñænh chung cuûa hai caïnh. Quaù trình tính toaùn ñöôïc trình baøy trong giaûi thuaät ñöôøng queùt cuõng nhö caùc giaûi thuaät khaùc coù moät ñaëc ñieåm noåi baät laø tính chaët cheõ cuûa caùc lôùp ñöôïc hieån thò. Chuùng ta noùi tính chaët cheõ laø nhö theá naøo? Ñôn giaûn laø ñaëc ñieåm cuûa moät phaàn thuoäc lôùp naøy seõ coù moái quan heä maät thieát vôùi phaàn keá tieáp, do ñoù seõ giaûm ñöôïc khoái löôïng xöû lyù coâng vieäc. Caùc phöông phaùp coù tính chaát chaët cheõ thöôøng ñöôïc söû duïng ñeå aùp duïng cho ñöôøng thaúng queùt ñôn hay cho caùc ñöôøng thaúng queùt keá tieáp. Trong vieäc xaùc ñònh giao ñieåm vôùi caùc caïnh, chuùng ta coù theå tính toaùn caùc toaï ñoä gia taêng doïc baát kyø caïnh naøo baèng caùch lôïi duïng tính chaát laø heä soá goùc cuûa caùc caïnh laø khoâng ñoåi öùng vôùi baát kyø ñöôøng thaúng queùt naøo. Hình 3-38 Hai ñöôøng thaúng keá nhau caét ñöôøng bao cuûa ña giaùc Ñöôøng thaúng queùt yk Ñöôøng thaúng queùt yk+1(xk+1, yk+1) (xk, yk) Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 44 Hình 3-38 minh hoïa hai ñöôøng thaúng keá nhau caét moät caïnh beân traùi cuûa ña giaùc. Heä soá goùc cuûa caïnh ñöôøng bao naøy seõ ñöôïc bieãu dieãn thoâng qua toïa ñoä cuûa caùc ñieåm caét nhö sau: yk+1 - yk m = ------------- (58) xk+1 - xk Vì söï thay ñoåi giaù trò cuûa y giöõa hai ñöôøng thaúng ñôn giaûn laø yk+1 - yk = 1 (59) Nhö theá, giaù trò x cuûa giao ñieåm xk+1 thuoäc ñöôøng thaúng phiaù treân seõ ñöôïc tính thoâng qua giaù trò x taïi giao ñieåm xk thuoäc ñöôøng thaúng beân döôùi nhö sau: xk+1 = xk + 1/m (60) Caùc giaù trò tieáp theo cuûa x coù theå ñöôïc tính baèng caùch coäng doàn giaù trò giaù trò nghòch ñaûo cuûa heä soá goùc vaø laøm troøn ñeán giaù trò nguyeân gaàn nhaát. Trong heä thoáng xöû lyù song song, vieäc thöïc thi giaûi thuaät toâ maøu coù theå ñöôïc tieán haønh moät caùch song song baèng caùnh öùng vôùi moãi ñöôøng thaúng queùt caét ngang ña giaùc, ta seõ chuyeån chuùng ñeán cho nhöõng quaù trình xöû lyù ñoäc laäp nhau. Quaù trình tính toaùn caùc giao ñieåm caïnh sau ñoù seõ ñöôïc tính toaùn moät caùch ñoäc laäp. Vôùi moät caïnh coù heä soá goùc laø m, giaù trò toïa ñoä theo truïc x laø xk öùng vôùi ñöôøng k naèm treân ñöôøng thaúng ban ñaàu coù theå tính nhö sau: xk = x0 + k/m (61) Trong giaûi thuaät toâ maøu lieân tieáp, gia soá cuûa giaù trò x laø 1/m doïc theo caùc caïnh cho ñeán khi keát thuùc chieàu daøi caïnh vôùi caùc pheùp toaùn treân soá nguyeân vaø cuõng neân chuù yù raèng, heä soá goùc m laø tæ soá giöõa hai soá nguyeân m = ∆x/∆y trong ñoù ∆x, ∆y sai phaân cuûa toïa ñoä giao ñieåm theo truïc x vaø truïc y. Vaø nhö vaäy, giaù trò x keá tieáp doïc theo caïnh laø: xk+1 = xk + ∆x/∆y (62) Söû duïng phöông trình naøy, chuùng ta coù theå tính ñöôïc giaù trò nguyeân cuûa x baèng caùch khôûi taïo laïi bieán ñeám veà giaù trò 0 vaø sau ñoù taêng daàn bieán ñeám moät giaù trò laø ∆x öùng vôùi moãi laàn di chuyeån ñeán ñöôøng thaúng queùt keá tieáp. Baát cöù khi naøo giaù trò bieán ñeám baèng hoaëc Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 45 lôùn hôn ∆y, chuùng ta seõ taêng giaù trò cuûa x leân 1 vaø giaûm giaù trò bieán ñeám ∆y. Moät thuû tuïc töông ñöông nhö theá naøy cuõng seõ ñöôïc söû duïng ñeå duy trì phaàn nguyeân vaø phaàn thaäp phaân cuûa giaù trò x vaø taêng phaàn thaäp phaân cho ñeán khi chuùng ta ñaït ñöôïc giaù trò nguyeân keá tieáp. Chuùng ta coù theå laøm troøn ñeán giaù trò x cuûa ñieåm gaàn nhaát thay vì caét boû ñeå ñaït ñeán giaù trò nguyeân gaàn nhaát baèng caùch ñieàu chænh laïi giaùi thuaät, vaø so saùnh vôùi ∆y/2. Ñieàu naøy coù theå thöïc hieän vôùi caùc soá nguyeân baèng caùch gia taêng bieán ñeám moät giaù trò laø 2∆x öùng vôùi moãi böôùc tính vaø so saùnh vôùi ∆y. Khi söï gia taêng laø lôùn hôn hay baèng ∆y, chuùng ta taêng giaù trò x leân 1 vaø giaûm bieán ñeám moät giaù trò laø 2∆y. Ñeå laøm taêng tính hieäu quaû cuûa giaûi thuaät toâ maøu, tröôùc tieân chuùng ta caàn löu tröõ ñöôøng bao cuûa ña giaùc vaøo baûng löu tröõ caùc caïnh laø nôi löu tröõ caùc giaù trò caàn thieát phuïc vuï cho giaûi thuaät toâ maøu moät caùch hieäu quaû. Vieäc löu tröõ coù theå thöïc hieän theo chieàu kim ñoàng hoà hay ngöôïc chieàu kim ñoàng hoà, chuùng ta coù theå söû duïng stack ñeå löu tröõ caùc caïnh ñoàng thôøi cuõng caàn löu tröõ giaù trò nhoû nhaát cuûa y cho moãi caïnh töông öùng vôùi vò trí chính xaùc cuûa ñöôøng thaúng queùt. Chæ coù caùc caïnh khoâng naèm theo phöông ngang môùi ñöôïc löu tröõ vaøo baûng löu tröõ caùc caïnh. Vôùi caùc caïnh ñöôïc xöû lyù, chuùng ta coù theå thu ngaén caùc caïnh chính xaùc ñeå giaûi quyeát baøi toaùn giao ñieåm laø caùc ñænh cuûa ña giaùc. Moåi laàn theâm vaøo baûng löu tröõ caïnh töôùng öùng vôùi moät ñöôøng thaúng cuï theå naøo ñoù, chuùng ta cuõng caàn löu laïi giaù trò lôùn nhaát cuûa y cho caïnh ñoù, löu tröõ giaù trò x cuûa ñænh thaáp hôn vaø nghòch ñaûo heä soá goùc. ÖÙng vôùi moãi ñöôøng thaúng queùt, caùc caïnh seõ ñöôïc saép xeáp theo thöù töï töø traùi sang phaûi. Tieáp theo, chuùng ta seõ tieán haønh xöû lyù caùc caïnh theo thöù töï töø döôùi leân treân, ta caàn taïo ra moät danh saùch caùc caïnh kích hoaït cho moãi ñöôøng thaúng queùt qua ña giaùc. Moãi danh saùch töông öùng cho moät ñöôøng kích hoaït seõ chöùa taát caû caùc caïnh maø ñöôøng thaúng ñi qua vaø caùc pheùp toaùn lieân quan ñeå coù theå tính ñöôïc caïnh giao. Vieäc thöïc hieän caùc pheùp tính caùc caïnh giao cuõng coù theå thuaän tieän hôn neáu chuùng ta löu caùc giaù trò ∆x vaø ∆y vaøo baûng löu. Vaø cuõng vaäy, ñeå baûo ñaûm raèng chuùng ta chæ toâ maøu caùc ñieåm naèm beân trong ña giaùc thì öùng vôùi moãi ñöôøng thaúng queùt, chuùng ta chæ tieán haønh toâ caùc ñieåm naèm trong khoaûng caùc caëp giao ñieåm x baét ñaàu töø ñieåm beân traùi nhaát vaø keát thuùc ôû ñieåm beân phaûi nhaát. Giaûi Thuaät Kieåm Tra Beân Trong Vaø Beân Ngoaøi Trong giaûi thuaät toâ maøu vuøng ñoái töôïng vaø trong nhöõng quaù trình xöû lyù ñoà hoïa khaùc, chuùng ta thöôøng xuyeân caàn phaûi xaùc ñònh vuøng naèm beân trong ñoái töôïng. Cho ñeán hieän taïi thì chuùng ta cuõng chæ baøn ñeán vieäc toâ maøu cho caùc ña giaùc coù hình daïng chuaån. Tuy nhieân trong hình hoïc cô baûn, ña giaùc thöôøng ñöôïc ñònh nghóa theo daïng khoâng coù söï töï giao nhau giöõa caùc caïnh. Ví duï nhö ña giaùc chæ ñôn giaûn laø caùc tam giaùc, töù giaùc, luïc giaùc hay baùt giaùc. Caùc caïnh thaønh phaàn cuûa caùc ñoái töông naøy chæ giao nhau taïi caùc ñænh cuûa ña giaùc vaø khoâng coù ñieåm chung naøo nöõa. Söï nhaän bieát caùc vuøng naèm beân trong caùc ña giaùc chuaån laø moät quaù trình khoâng maáy khoù khaên. Nhöng trong phaàn lôùn caùc öùng duïng ñoà hoïa, chuùng ta coù theå chæ ra daõy lieân tuïc caùc ñænh cuûa vuøng toâ maøu keå caû caùc ñænh laø giao ñieåm cuûa caùc caïnh vaø nhö theá raát khoù xaùc ñònh ñaâu laø caùc ñieåm naèm beân trong vaø ñaâu laø caùc ñieåm naèm Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 46 beân ngoaøi ñoái töôïng. Caùc phaàn meàm ñoà hoïa thöôøng duøng nguyeân taéc chaün leû hay nguyeân taéc heä soá xoaén khaùc khoâng ñeå nhaän bieát caùc vuøng beân trong naøy. Chuùng ta seõ söû duïng nguyeân taéc tính chaún leõ baèng nguyeân lyù veõ moät ñöôøng thaúng töø moät ñieåm baát kyø P ñeán moät ñieåm caùch xa naèm beân ngoaøi toïa ñoä ñoái töôïng baèng caùch ñeám soá caïnh caét ngang ñöôøng queùt. Neáu soá caïnh caét ngang ñöôøng queùt laø soá leû thì P laø ñieåm naèm beân trong, ngöôïc laïi thì P laø ñieåm naèm beân ngoaøi. Ñeå coù theå ñeám soá caïnh chính xaùc, chuùng ta phaûi ñaûm baûo raèng ñöôøng thaúng maø chuùng ta choïn khoâng ñöôïc ñi qua baát kyø ñænh naøo cuûa ña giaùc. Giaûi thuaät toâ maøu theo phöông phaùp ñöôøng thaúng queùt noùi treân laø moät ví duï cuûa giaûi thuaät toâ maøu theo phöông phaùp chaün leû. Moät phöông phaùp khaùc coù theå xaùc ñònh moät ñieåm naèm beân trong hay beân ngoaøi ñoái töôïng laø phöông phaùp duøng nguyeân taéc ñeám soá ñieåm xoaén khaùc khoâng laø nguyeân taéc ñeám soá laàn caùc caïnh cuûa ña giaùc uoán quanh moät ñieåm theo chieàu ngöôïc chieàu kim ñoàng hoà. Soá ñeám naøy ñöôïc goïi laø heä soá xoaén vaø moät ñieåm naèm beân trong ñoái töôïng hai chieàu ñöôïc ñònh nghóa laø nhöõng ñieåm coù heä soá xoaén khaùc khoâng. Chuùng ta aùp duïng nguyeân taéc heä soá xoaén khaùc khoâng naøy vaøo moät ña giaùc baèng caùch khôûi taïo heä soá xoaén baèng khoâng vaø moät laàn nöõa hình dung laø ñöôøng thaúng ñi qua ñieåm P baát kyø noái vôùi moät ñieåm caùch xa beân ngoaøi toïa ñoä cuûa ñoái töôïng. Vaø ñöôøng thaúng chuùng ta choïn khoâng ñi qua baát kyø moät ñænh naøo cuûa ña giaùc. Nhö vaäy chuùng ta seõ ñi doïc theo ñöôøng thaúng baét ñaàu töø ñieåm P ñeán ñieåm caùch xa ñoái töôïng vaø ñeám soá caïnh caét ñöôøng thaúng öùng vôùi moãi chieàu. Chuùng ta seõ coäng theâm moät vaøo heä soá xoaén neáu caïnh ña giaùc caét ñöôøng thaúng töø phaûi sang traùi vaø tröø moät ra khoûi heä soá xoaén neáu caïnh ña giaùc caét ñöôøng thaúng töø traùi sang phaûi. Giaù trò cuoái cuøng cuûa heä soá xoaén sau khi caùc caïnh caét ngang ñöôøng thaúng ñaõ ñöôïc ñeám heát seõ quyeát ñònh vò trí töông öùng cuûa P. Neáu heä soá xoaén laø khaùc khoâng thì P laø moät ñieåm naèm beân trong ñoái töôïng. Ngöôïc laïi thì P laø moät ñieåm thuoäc beân ngoaøi ñoái töôïng. Ñoái vôùi caùc ña giaùc vaø caùc ñoái töôïng coù daïng hình hoïc chuaån thì caû hai phöông phaùp chaün leû vaø heä soá xoaén khaùc khoâng ñeàu cho ra cuøng moät keát quaû. Nhöng ñoái vôùi caùc ñoái töôïng coù daïng hình hoïc phöùc taïp thì hai phöông phaùp treân coù theå xaùc ñònh ra ñöôïc caùc vuøng naèm beân trong vaø beân ngoaøi moät ñoái töôïng laø khaùc nhau. Moät caùch ñeå coù theå xaùc ñònh chieàu cuûa caùc caïnh laø xaùc ñònh moät vector toång cuûa hai vector - moät doïc theo chieàu ñöôøng thaúng ñi qua P ra ñieåm xa voâ cuøng vaø moät vector caïnh E töông öùng vôùi moãi caïnh bò caét. Neáu thaønh phaàn z cuûa vector cheùo u x E cho moät caïnh cuï theå naøo ñoù laø döông thì chieàu cuûa caïnh caét ngang ñöôøng thaúng ñöôïc xem laø töø phaûi qua traùi vaø chuùng ta seõ coäng 1 vaøo heä soá xoaén. Ngöôïc laïi, caïnh seõ caét ñöôøng thaúng theo chieàu töø traùi sang phaûi vaø chuùng ta seõ tröø 1 töø heä soá xoaén. Vector caïnh coù theå ñöôïc tính toaùn baèng caùch tröø giaù trò toïa ñoä cuûa vò trí ñaàu cho vò trí cuoái. Moät vaøi phaàn meàm ñoà hoïa duøng phöông phaùp heä soá xoaén ñeå xaùc ñònh vuøng toâ maøu thay vì duøng phöông phaùp chaün leû vì phöông phaùp heä soá xoaén toû ra linh hoaït hôn. Trong tröôøng hôïp toång quaùt, ñoái töôïng coù theå ñöôïc ñònh nghóa baèng taäp caùc ñænh phöùc taïp khoâng lieân thoâng hoaëc moät taäp caùc ñöôøng cong rôøi raïc vaø chieàu ñöôïc chæ ra trong caùc taäp naøy seõ ñöôïc duøng ñeå xaùc ñònh vuøng naèm beân trong ñoái töôïng. Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 47 Giaûi Thuaät Toâ Maøu Theo Caùc Ñöôøng Bieân Moät phöông caùch khaùc cuõng coù theå ñöôïc duøng ñeå toâ maøu ñoái töôïng laø baét ñaàu töø moät vò trí naèm beân trong ñoái töôïng, chuùng ta seõ tieán haønh toâ theo chieàu höôùng ra caùc ñöôøng bieân. Neáu caùc ñöôøng bieân ñöôïc ñònh nghóa baèng caùc maøu ñôn saéc thì giaûi thuaät seõ tieán haønh toâ maøu caùc ñieåm theo xu höôùng höôùng ra ñöôøng bieân vaø döøng laïi khi ñuïng phaûi maøu cuûa ñöôøng bieân. Phöông phaùp naøy - coøn ñöôïc goïi laø giaûi thuaät toâ maøu theo ñöôøng bieân - ñaëc bieät raát höõu hieäu trong caùc phaàn meàm veõ hình nôi maø caùc vuøng thuoäc beân trong ñoái töôïng laø deã daøng xaùc ñònh. Söû duïng taám baûn veõ hay caùc thieát bò ñeå veõ khaùc, ngöôøi söû duïng coù theå phaùc hoïa ra ñöôïc ñoái töôïng mình caàn veõ, choïn maøu saéc töø caùc baûng maøu vaø toâ maøu cho caùc vuøng naèm beân trong ñoái töôïng. Thuû tuïc toâ maøu theo caùc ñöôøng bieân coù caùc giaù trò ñaàu vaøo laø toïa ñoä cuûa ñieåm naèm beân trong ñoái töôïng (x, y), maøu saéc seõ ñöôïc toâ vaø maøu saéc cuûa ñöôøng bieân. Baét ñaàu töø vò trí (x,y), thuû tuïc naøy seõ tieán haønh xem xeùt caùc ñieåm laân caän vaø xem chuùng coù phaûi laø caùc ñieåm thuoäc ñöôøng bieân hay khoâng? Neáu khoâng, chuùng ta seõ tieán haønh toâ maøu vaø tieáp tuïc xeùt tieáp ñeán caùc ñieåm laân caän vôùi ñieåm vöøa môùi ñöôïc toâ maøu. Quaù trình naøy cöù nhö theá tieáp tuïc cho ñeán khi taát caû caùc ñieåm töø vò trí (x, y) cho ñeán caùc ñieåm naèm treân ñöôøng bieân ñeàu ñöôïc kieåm tra. Sau ñaây laø moät thuû tuïc minh hoïa cho phöông phaùp ñeä quy duøng ñeå toâ maøu söû duïng vieäc kieåm tra boán ñieåm laân caän vôùi maøu saéc seõ toâ cho caùc ñieåm ñöôïc xaùc ñònh trong tham soá fill vaø maøu saéc cuûa ñöôøng bieân ñöôïc cho trong tham soá boundary.Thuû tuïc naøy cuõng coù theå söû duïng ñeå toâ maøu cho vieäc kieåm tra taùm ñieåm laân caän. void boundaryFill4 (int x, int y, int fill, int boundary) { int current; current = getPixel(x ,y); if ((current != boundary) && (current != fill) { setColor (fill); setPixel(x, y); boundaryfill4(x+1, y, fill, boundary); boundaryfill4(x-1, y, fill, boundary); boundaryfill4(x, y+1, fill, boundary); boundaryfill4(x, y-1, fill, boundary); } } Giaûi thuaät toâ maøu theo ñöôøng bieân ñeä theo phöông phaùp ñeä quy coù theå seõ khoâng toâ maøu caùc vuøng moät caùch chính xaùc neáu nhö coù moät vaøi ñieåm trong vuøng ñöôïc toâ ñaõ coù maøu saéc truøng vôùi maøu ñöôïc toâ. Ñieàu naøy laø do thuû tuïc ñaõ kieåm tra ñieåm keá tieáp treân caû hai tham soá laø maøu ñöôøng bieân vaø maøu toâ. Neáu phaùt hieän ra moät ñieåm coù maøu saéc hieän haønh Luaän AÙn Toát Nghieäp Phaàn thuyeát minh Sinh vieân thöïc hieän: Bieän Coâng Minh - Nguyeãn Xuaân Sôn Trang 48 laø truøng vôùi maøu ñöôïc toâ, giaûi thuaät seõ döøng trong khi coù moät soá ñieåm khaùc vaãn chöa ñöôïc toâ. Ñeå giaûi quyeát vaán ñeà naøy chuùng ta coù theå thay ñoåi maøu saéc cho taát caû caùc ñieåm vôùi maøu laø khaùc vôùi maøu ñöôïc toâ vaø maøu ñöôøng bieân tröôùc khi chuùng ta aùp duïng thuû tuïc naøy. Giaûi Thuaät Veát Daàu Loang Ñoâi khi chuùng ta cuõng coù theå tieán haønh toâ maøu caùc ñoái töôïng coù maøu saéc ñöôøng bieân khoâng phaûi laø moät maøu nhaát ñònh cho tröôùc. Trong nhöõng tröôøng hôïp nhö theá, chuùng ta coù theå tieán haønh toâ maøu theo caùch thay theá maøu saéc cho caùc ñieåm beân trong thay vì laø kieåm tra giaù trò maøu saéc cuûa ñöôøng bieân. Vieäc laøm naøy seõ cho chuùng ta giaûi thuaät toâ maøu môùi goïi laø giaûi thuaät veát daàu loang. Chuùng ta seõ baét ñaàu töø moät vò trí beân trong (x, y) vaø tieán haønh thay theá giaù trò maøu cho taát caû caùc ñieåm - nhöõng ñieåm ñang mang nhöõng maøu cuï theå - moät giaù trò maøu môùi laø maøu chuùng ta caàn toâ. Neáu vuøng caàn toâ coù nhieåu maøu saéc khaùc nhau thì tröôùc tieân chuùng ta seõ laøm cho caùc ñieåm naøy coù cuøng chung moät maøu saéc. Söû duïng hoaëc 4 hoaëc 8 ñieåm laân caän, chuùng ta seõ laàn löôït toâ cho ñeán khi taát caû caùc ñieåm ñeàu ñöôïc toâ baèng maøu môùi. Sau ñaây laø thuû tuïc minh hoïa cho giaûi thuaät veát daàu loang. void floatFill4 (int x, int y, int fillColor, int oldColor) { if (getPixel (x, y) == oldColor) { setColor(fillColor); setPixel(x, y); floodFill4(x+1, y, fillColor, oldColor); floodFill4(x-1, y, fillColor, oldColor); floodFill4(x, y+1, fillColor, oldColor); floodFill4(x, y-1, fillColor, oldColor); } } Toùm Taét Trong haàu heát caùc phaàn meàm ñoà hoïa, nguyeân thuûy cuûa vieäc toâ maøu laø toâ

Các file đính kèm theo tài liệu này:

  • pdfCơ sở toán học trong đồ hoạ máy tính.pdf