Bài giảng đồ họa Clipping
ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 1/11CCaáùcc tthhuuaậätt ttooaáùnn xxeéùnnđđiieểåmm,, đđooaạïnn tthhaẳúnnggDDaẫãnn nnhhaậäpp• Thao tác loại bỏ các phần hình ảnh nằm ngoài mộtvùng cho trước được gọi là xén hình.• Vùng được dùng để xén hình gọi là cửa sổ xén (clipwindow).• Cho cửa sổ hình chữ nhật có tọa độ của các điểmdưới bên trái và điểm trên bên phải lần lượt là( )minmin, yx và ( )maxmax, yx.• Một điểm ( )yxP , được coi là nằm bên trong cửa sổnếu thỏa hệ bất phương trình : ≤≤≤≤maxminmaxminyyyxxx.• Bây giờ, ta sẽ xét bài toán xén đoạn thẳng được chobởi hai điểm ( )111, yxP và ( )222, yxPvào cửa sổ hìnhchữ nhật trên.(a)WindowP1P2P3P4P5P6P7P8(b)WindowP1P2P'5P'6 ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 2/11VVaấánn đđeềà ttoốáii ưưuu hhoóùaa ttoốácc đđoộä• Ý tưởng chung :♦ Đối với các đoạn thẳng đặc biệt như nằm hoàn toàntrong hoặc hoàn toàn bên ngoài cửa sổ (ví dụ như đoạnP1P2 và P3P4 trong hình trên) : không cần phải tìm giaiểm.♦ Đối với các đoạn thẳng có khả năng cắt cửa sổ : cần phảiđưa ra cách tìm giao điểm nhanh.• Nhận xét♦ Các đoạn thẳng mà có cả hai điểm nằm hoàn toàn trongcửa sổ thì cả đoạn thẳng nằm trong cửa sổ, đây cũngchính là kết quả sau khi xén (ví dụ như đoạn thẳngP1P2), mặt khác đối với các đoạn thẳng mà có hai điểmnằm về cùng một phía của cửa sổ thì luôn nằm ngoài cửasổ và sẽ bò mất sau khi xén (ví dụ như đoạn thẳng P3P4).♦ Với các đoạn thẳng có khả năng cắt cửa sổ (ví dụ nhưđoạn thẳng P5P6 và P7P8) để việc tìm giao điểm nhanhcần rút gọn việc tìm giao điểm với những biên cửa sổkhông cần thiết để xác đònh phần giao nếu có của đoạnthẳng và cửa sổ.• Người ta thường sử dụng phương trình tham số củoạn thẳng trong việc tìm giao điểm giữa đoạn thẳngvới cửa sổ.( )( )10 , , ,121121121121≤≤−=+=−+=−=+=−+=tyyDytDyyyytyyxxDxtDxxxxtxx• Nếu giao điểm ứng với giá trò t nằm ngoài đoạn [ ]1,0thì giao điểm đó sẽ không thuộc về cửa sổ. ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 3/11TThhuuaậätt ttooaáùnn CCoohheenn -- SSuutthheerrllaanndd• Kéo dài các biên của cửa sổ, ta chia mặt phẳngthành chín vùng gồm cửa sổ và tám vùng xungquanh nó.• Khái niệm mã vùng (area code)♦ Một con số 4 bit nhò phân gọi là mã vùng sẽ được gáncho mỗi vùng để mô tả vò trí tương đối của vùng đó so vớicửa sổ.♦ Bằng cách đánh số từ 1 đến 4 theo thứ tự từ phải quatrái, các bit của mã vùng được dùng theo quy ước sau đểchỉ một trong bốn vò trí tương đối của vùng so với cửa sổbao gồm : trái, phải, trên, dưới. Ví dụ :Bit 1 : trái (LEFT)Bit 2 : phải (RIGHT)Bit 3 : trên (TOP)Bit 4 : dưới (BOTTOM)♦ Giá trò 1 tương ứng với vò trí bit nào trong mã vùng sẽchỉ ra rằng điểm đó ở vò trí ương ứng, ngược lại bit đó sẽđược đặt bằng 0.♦ Các giá trò bit trong mã vùng được tính bằng cách xácđònh tọa độ của điểm ( )yx, thuộc vùng đó với các biêncủa cửa sổ. Bit 1 được đặt là 1 nếu minxx <, các bit khácđược tính tương tự.0100Window011001010001100100101010100000001234LEFTRIGHTTOPBOTTOMTOPLEFT RIGHTBOTTOM ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 4/11TThhuuaậätt ttooaáùnn• Gán mã vùng tương ứng cho các điểm đầu cuối21, PPcủa đoạn thẳng cần xén lần lượt là 21, cc. Tacó nhận xét :♦ Các đoạn thẳng nằm hoàn toàn bên trong cửa sổ sẽ có000021== cc, ứng với các đoạn này, kết quả sau khixén là chính nó.♦ Nếu tồn tại 4, 1∈k, sao cho với bit thứ k của 21, cc đềucó giá trò 1, lúc này đoạn thẳng sẽ nằm về cùng phía ứngvới bit k so với cửa sổ, do đó nằm hoàn toàn ngoài cửasổ. Đoạn này sẽ bò loại bỏ sau khi xén. Để xác đònh tínhchất này, đơn giản chỉ cần thực hiện phép toán logicAND trên 21, cc. Nếu kết quả khác 0000, đoạn thẳng sẽnằm hoàn toàn ngoài cửa sổ.♦ Nếu 21, cc không thuộc về hai trường hợp trên, đoạnthẳng có thể hoặc không cắt ngang cửa sổ, chắc chắn sẽtồn tại một điểm nằm ngoài cửa sổ, không mất tính tổngquát giả sử điểm đó là 1P. Bằng cách xét mã vùng của1P là 1c ta có thể xác đònh được các biên mà đoạnthẳng có thể cắt để từ đó chọn một biên và tiến hànhtìm giao điểm '1Pcủa đoạn thẳng với biên đó. Lúc này,đoạn thẳng ban đầu được xén thành '11PP. Sau đó chúngta lại lặp lại thao tác đã xét cho đoạn thẳng mới '11PPcho tới khi xác đònh được phần nằm trong hoặc loại bỏtoàn bộ đoạn thẳng.♦ Các điểm giao với các biên cửa sổ của đoạn thẳng có thểđược tính từ phương trình tham số. Ví dụ : tung độ y củiểm giao đoạn thẳng với biên đứng của cửa sổ có thểtính từ công thức ( )11xxmyy −+=, trong đó x có thể làminx hay maxx. ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 5/11Lưu đồ thuật toán Cohen - Sutherland// Đoạn CT tính mã vùngvoid EnCode(POINT p, CODE &c, RECT rWin){c = 0;if(p.x < rWin.Left)c |= LEFT;if(p.x > rWin.Right)c |= RIGHT;if(p.y > rWin.Top)c |= TOP;if(p.y < rWin.Bottom)c |= BOTTOM;}BeginEnCode(P1,c1);EnCode(P2,c2)(c1!=0000) || (c2!=0000)Yes(c1&c2 == 0000)YesXác đònh giao điểm của đoạnthẳng với biên của cửa sổbằng cách xét mã vùng củiểm nằm ngoài cửa sổNoNoEnd ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 6/11TThhuuaậätt ttooaáùnn LLiiaanngg -- BBaarrsskkyy• Thuật toán Liang-Barsky được phát triển dựa vàoviệc phân tích dạng tham số của phương trình đoạnthẳng.( )( )10 , , ,121121121121≤≤−=+=−+=−=+=−+=tyyDytDyyyytyyxxDxtDxxxxtxx• Ứng với mỗi giá trò t, ta sẽ có một điểm P tương ứngthuộc đường thẳng.♦ Các điểm ứng với 1≥tsẽ thuộc về tia P2x.♦ Các điểm ứng với 0≤t sẽ thuộc về tia P2x’.♦ Các điểm ứng với 10 ≤≤ t sẽ thuộc về đoạn thẳng 21PP.• Tập hợp các điểm thuộc về phần giao của đoạn thẳngvà cửa sổ ứng với các giá trò t thỏa hệ bất phươngtrình : ≤≤≤+≤≤+≤10max1minmax1mintytDyyyxtDxxxP1(x1, y1)P2(x2, y2)t=0t=1t>1xx't<0 ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 7/11• Đặt 1max44min1331max22min111 , , , ,yyqDypyyqDypxxqDxpxxqDxp−==−=−=−==−=−=• Lúc này ta viết hệ phương trình trên dưới dạng :≤≤=≤1t04,3,2,1 , kqtpkk• Như vậy việc tìm đoạn giao thực chất là tìm nghiệmcủa hệ bất phương trình này. Có hai khả năng xảyra đó là :♦ Hệ bất phương trình vô nghiệm, nghóa là đường thẳngkhông có phần giao với cửa sổ nên sẽ bò loại bỏ.♦ Hệ bất phương trình có nghiệm, lúc này tập nghiệm sẽlà các giá trò t thỏa [ ] [ ]1,0,21⊆∈ ttt.• Ta xét các trường hợp :♦ Nếu { })0()0( : 4,3,2,1 <∧=∈∃kkqpk thì rõ ràng bấtphương trình ứng với k trên là vô nghiệm, do đó hệ vônghiệm.♦ Nếu { })0()0( : 4,3,2,1 ≥∨≠∈∀kkqpkthì với các bấtphương trình mà ứng với pk = 0 là các bất phương trìnhhiển nhiên, lúc này hệ bất phương trình cần giải tươngđương với hệ bất phương trình có pk ≠ 0.♦ Với các bất phương trình kkqtp ≤ mà 0<kp, ta cókkpqt /≥.♦ Với các bất phương trình kkqtp ≤mà 0>kp, ta cókkpqt /≤. ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 8/11• Vậy nghiệm của hệ bất phương trình là [ ]21,tt với :{ }{ }≤>=<=2121)1 0,min()0 0,max(ttppqtppqtkkkkkkUU• Nếu hệ trên có nghiệm thì đoạn giao 21QQ sẽ là),(),,(2121211111DytyDxtxQDytyDxtxQ ++++.• Nếu xét thuật toán này ở khía cạnh hình học ta có :♦ Trường hợp { })0()0( : 4,3,2,1 <∧=∈∃kkqpk tương ứngvới trường hợp đoạn thẳng cần xét song song với mộttrong các biên của cửa sổ (0=kp) và nằm ngoài cửa sổ(0<kq) nên sẽ bò loại bỏ sau khi xén.♦ Với 0≠kp, giá trò kkkpqrt /== sẽ tương ứng vớigiao điểm của đoạn thẳng với biên k kéo dài của cửa sổ.Trường hợp 0<kp, kéo dài các biên cửa sổ và đoạnthẳng về vô cực, ta có đường thẳng đang xét sẽ có hướngđi từ bên ngoài vào bên trong cửa sổ. Nếu 0>kp, đườngthẳng sẽ có hướng đi từ bên trong cửa sổ đi ra. Do đó haiđầu mút của đoạn giao sẽ ứng với các giá trò 21, tt đượctính như sau : Giá trò 1t chính là giá trò lớn nhất của cáckkkpqr /=mà 0<kp (đường thẳng đi từ ngoài vàotrong cửa sổ) và 0; giá trò 2t chính là giá trò nhỏ nhấtcủa các kkkpqr /=mà 0>kp (đường thẳng đi từ trongcửa sổ đi ra) và 1. ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 9/11TThhuuaậätt ttooaáùnn xxeéùnn đđaa ggiiaáùccSSuutthheerrllaanndd -- HHooddggeemmaannddDDaẫãnn nnhhaậäpp• Chúng ta có thể hiệu chỉnh các thuật toán xén đoạnthẳng để xén đa giác bằng cách xem đa giác như làmột tập các đoạn thẳng liên tiếp nối với nhau. Tuynhiên, kết quả sau khi xén nhiều khi lại là tập cácđoạn thẳng rời nhau.• Điều chúng ta mong muốn ở đây đó là kết quả saukhi xén phải là một các đa giác để sau này có thểchuyển thành các vùng tô.(a) (b) (c) ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 10/11TThhuuaậätt ttooaáùnn SSuutthheerrllaanndd -- HHooddggeemmaann• Thuật toán này sẽ tiến hành xén đa giác lần lượt vớicác biên cửa sổ. Đầu tiên, đa giác sẽ được xén dọctheo biên trái của cửa sổ, kết quả sau bước này sẽđược dùng để xén tiếp biên phải, rồi cứ tương tự nhưvậy cho các biên trên, dưới. Sau khi xén hết với bốnbiên của cửa sổ, ta được kết quả cuối cùng.• Với mỗi lần xén đa giác dọc theo một biên nào đócủa cửa sổ, nếu gọi 1,+iiVV là hai đỉnh kề cạnh1+iiVV, ta có 4 trường hợp có thể xảy ra khi xét từngcặp đỉnh của đa giác ban đầu với biên của cửa sổ nhưsau:♦ Nếu iV nằm ngoài, 1+iV nằm trong, ta lưu giao điểm Icủa 1+iiVV với biên của cửa sổ và 1+iV.♦ Nếu cả iV, 1+iV đều nằm trong, ta sẽ lưu cả iV, 1+iV.♦ Nếu iV nằm trong, 1+iV nằm ngoài, ta sẽ lưu iV và I.♦ Nếu cả iV, 1+iV đều nằm ngoài, ta không lưu gì cả.ViVi+1I ViVi+1ViVi+1I(i)ViVi+1(ii) (iii) (iv) [...]...ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán xén hình 5/11 Lưu đồ thuật toán Cohen - Sutherland // Đoạn CT tính mã vùng void EnCode(POINT p, CODE &c, RECT rWin) { c = 0; if(p.x < rWin.Left) c |= LEFT; if(p.x > rWin.Right) c... BOTTOM; } Begin EnCode(P1,c1); EnCode(P2,c2) (c1!=0000) || (c2!=0000) Yes (c1&c2 == 0000) Yes Xác định giao điểm của đoạn thẳng với biên của cửa sổ bằng cách xét mã vùng của điểm nằm ngoài cửa sổ No No End ĐỒ HỌA MÁY TÍNH Dương Anh Đức, Lê Đình Duy Các thuật toán xén hình 2/11 V V a a á á n n đ đ e e à à t t o o á á i i ư ư u u h h o o ù ù a a t t o o á á c c đ đ o o ä ä • Ý tưởng . −+=, trong đó x có thể làminx hay maxx. ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 5/11Lưu đồ thuật toán Cohen - Sutherland// Đoạn. sổ hìnhchữ nhật trên.(a)WindowP1P2P3P4P5P6P7P8(b)WindowP1P2P'5P'6 ĐỒ HỌA MÁY TÍNHDương Anh Đức, Lê Đình Duy Các thuật toán xén hình 2/11VVaấánn