ĐỒ HỌA MÁY TÍNH - XÉN HÌNH, TÔ MÀU potx

13 1.4K 12
ĐỒ HỌA MÁY TÍNH - XÉN HÌNH, TÔ MÀU potx

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

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

Thông tin tài liệu

4/4/2011 1 Tr ương Văn Quốc Nhật 1 CH 2. XÉN HÌNH, TÔ MÀU Nội dung 2  Xén hình 1. Xén đoạn thẳng vào hình chữ nhật Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky 2. Xén đoạn thẳng vào hình tròn 3. Xén đường tròn vào hình chữ nhật 4. Xén đa giác vào hình chữ nhật 5. Xén đa giác vào đa giác  Tô màu 1. Thuật toán Loang 2. Thuật toán Dòng quét (Scan-line)  Bài tập 4/4/2011 2 Xén (clipping) 3 1. Xén đoạn thẳng vào hình chữ nhật 4 1 2 4 3 5 6 • Thuật toán Chia nhị phân • Cohen–Sutherland • Liang–Barsky 4/4/2011 3 Thuật toán Cohen–Sutherland 5 1 2 4 3 5 6 • A = B = 0000  AB D B A ABFClip D • A & B ≠ 0000  AB D D  FClip D  • A & B = 0000 và A | B ≠ 0000: Xét A (giả sử A nằm ngoài):  Thay A bởi giao của AB với cạnh trái nối dài  Thay A bởi giao của AB với cạnh phải nối dài  Thay A bởi giao của AB với cạnh dưới nối dài  Thay A bởi giao của AB với cạnh trên nối dài Bit: 3 2 1 0 Thuật toán Chia nhị phân 6 2 4 3 6 D 1 5 Bit: 3 2 1 0 4/4/2011 4 Thuật toán Liang-Barsky 7 D ABA ABA yytyy xxtxx Ptrình tham số: Thứ tự cắt: tráiphảitrêndưới 1 3 2 4 1 3 2 1 1 2 Cohen- : Cập nhật y Liang- : Cập nhật t Bit: 3 2 1 0   AB xxx AB yyy, xp 1 xp 2 yp 3 yp 4 min1 , xxq A A xxq max2 , min3 , yyq A A yyq max4 , 10 4,1, t kqtp kk 10 maxmin maxmin t yyytyy xxxtxx ABA ABA Đặt: CÝ: 0 k p 0 k p 0 k p : AB // 1 cạnh : ngoài  trong (trái) (phải) (dưới) (trên) : trong  ngoài Kiểm tra… 8 D AB xxx AB yyy, xp 1 xp 2 yp 3 yp 4 min1 , xxq A A xxq max2 , min3 , yyq A A yyq max4 , Đặt: 0 k p 0 k p 0 k p : AB // 1 cạnh : ngoài  trong (trái) (phải) (dưới) (trên) : trong  ngoài x min y max x max y min Cạnh trái Cạnh phải Cạnh dưới Cạnh trên BA xxp 1 AB xxp 2 BA yyp 3 AB yyp 4 - + - + + - + - - ++ - + + 4/4/2011 5 11 Thuật toán Liang-Barsky t 0 =0; dx=x B -x A ; t 1 =1; dy=y B -y B ; for (canh=14){ //duyệt lần lượt các cạnh //0.tính p,q,r //1.cạnh song song  ko vẽ //2.ngoài  trong //nằm ngoài ko vẽ //xén được 1 tí //3.trong  ngoài //nằm ngoài ko vẽ //xén được 1 tí switch (canh){ 1: p=-dx; q=x A -x min ; 2: p=dx; q=x A -x min ; 3: p=-dy; q=x A -x min ; 4: p=dy; q=x A -x min ; } r=q/p; } if (p<0){ } else if (p>0) { } x 0 =x A +t 0 *dx; y 0 =y A +t 0 *dy; x 1 =x A +t 1 *dx; y 1 =y A +t 1 *dy; return đoạn:(x0,y0)(x1,y1); if (p=0 && q<0) return ; if (r>t 1 ) return ; if (r>t 0 ) t 0 =r; if (r<t 0 ) return ; if (r>t 1 ) t 1 =r; Xén đoạn thẳng vào HCN xiên 12 α α xoay -α cắt xoay α 4/4/2011 6 Xén đa giác vào hình chữ nhật 13 Ý tưởng Sutherland-Hodgeman 14 trên dưới phải trái 4/4/2011 7 Cắt dọc theo cạnh trên 15 1 2 3 4 5 6 7 8 9 10 A=10; for (B=110){ if (B trong){ } else { } } d A=B; if (A ngoài) Thêm(AB∩d); Thêm(B); if (A trong) Thêm(AB∩d); A B C D A 1 B C 4 5 6 7 8 9 D U U 1 U n Thuật toán Sutherland-Hodgeman 17 VU; A=V n ; for (B = V 1 V n ){ } if (B trong){ } else { } if (A ngoài) ném(AB∩cạnh); ném(B); if (A trong) ném(AB∩cạnh); A=B; for (cạnh = trênphảidướitrái){ } U = danh_sách_đỉnh_đa_giác; //cý: sau mỗi lần cắt, n có thể thay đổi //lúc này: V đầy, U rỗng VU V 1 V n 4/4/2011 8 Cắt đôi? 18 12 3 4 6 5 Cắt thành 2 cái luôn à? Xén đa giác vào đa giác 19 4/4/2011 9 Ui chao, dễ òm! Xác định “trong”, “ngoài”? 20 A (2,3) B(7,9) 1 n 2 n ABAB ABAB xxyyn xxyyn , , 2 1 P (5,3) α cosnAPnAP n + - 0 ABAB xxyyyxnAP AP yxAP , Giả sử: :0cos :0cos :0cos trong ngoài trên ngoài trong trên Xác định mã 21 D Bit: 3 2 1 0 x min y max x max y min P = 0; if (x P < x min ) P = P|1; //trái P if (x P > x max ) P = P|2; //phải if (y P < y min ) P = P|4; //dưới if (y P > y max ) P = P|8; //trên x P y P x min x max y min y max P Tính mã 4/4/2011 10 Nội dung 22  Xén hình 1. Xén đoạn thẳng vào hình chữ nhật Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky 2. Xén đoạn thẳng vào hình tròn 3. Xén đường tròn vào hình chữ nhật 4. Xén đa giác vào hình chữ nhật 5. Xén đa giác vào đa giác  Tô màu 1. Thuật toán Scanline 2. Thuật toán Loang  Bài tập Thuật toán Loang – Ý tưởng 23 5 1 3 9 12 4 10 19 22 11 20 33 36 21 34 39 25 13 38 24 37 26 28 14 27 16 6 15 29 8 2 7 17 41 40 23 18 31 32 30 35 x x42 • Đệ quy • Khử đệ quy 4 p 2 3 1 [...]... (Scan-line) x1 x1 x2 x2 x1 x3 x3 x4 x3 x4 x4 x2 x3 x2 x1 x2 x1 x1,x2,x3,x4,x5,x6 28 xi xi+1 (x1,x2), (x3,x4 ), ( x5,x6) - Dòng quét cắt đứt 2 cạnh liên tiếp  bỏ xi+1 - Dòng quét xẹt qua 2 cạnh liên tiếp  giữ xi+1 Bài tập 1 Bắt buộc (2 tuần): Xây dựng (nếu có) & Cài đặt các thuật toán :  Xén đoạn thẳng vào hình chữ nhật (Cohen–Sutherland, Liang-Barsky)  Xén đa giác vào hình chữ nhật (Sutherland-Hodgeman)... Liang-Barsky)  Xén đa giác vào hình chữ nhật (Sutherland-Hodgeman)  Tô màu Loang (đệ quy, khử đệ quy) Mỗi thuật toán vẽ là 1 phương thức, gộp vào 1 file mã nguồn (đuôi là cs) 29 2 Không bắt buộc (thoải mái): Xây dựng (nếu có) & Cài đặt các thuật toán:  Xén đoạn thẳng vào HCN xiên  Xén đa giác vào đa giác (Sutherland-Hodgeman)  Tô màu dòng quét 13 ... toán Loang – Khử đệ quy Vào: x0,y0,mau Tô( x0,y0); Q = {(x0,y0)}; Tô( x0,y0); dau=cuoi=0; Qx[0]=x0; Qy[0]= y0; while (Q ≠ Ф) { while (dau ≤ cuoi) { Px=Qx[dau]; Py=Qy[dau]; dau++; //lấy p từ Q for ( (vx,vy) Kề(px,py)) if [(vx,vy) S && ChưaTô(vx,vy)] { Tô( vx,vy); cuoi++; Qx[cuoi]=vx; Qy[cuoi]=vy;//đưa v vào Q } } Pop(p);//lấy p từ Q for ( v if [v { Kề(p)) S && ChưaTô(v)] Tô( v); Push(v);//đưa v vào Q } } 26...4/4/2011 Stack Thuật toán Loang – Đệ quy x 0 5 6 3 x x S && ChưaTô(x,y)] 4 6 5 x 5 7 4 17 6 8 3 16 7 9 2 15 8 10 1 14 9 11 12 13 Loang(x,y,mau) { if [(x,y) { Tô( x,y); Loang(x,y-1,mau); Loang(x+1,y,mau); Loang(x,y+1,mau); Loang(x-1,y,mau); } } Gọi: Loang(6,8,đỏ) 7 y 24 Loang(4,4) Loang(5,5) Loang(6,4) Loang(5,3) Loang(5,4) Loang(6,5) Loang(7,4) Loang(6,3)... Loang(5,7) Loang(6,8) Loang(7,7) Loang(6,6) Loang(5,8) Loang(7,9) Loang(7,8) Loang(6,7) Loang(6,8) Queue Thuật toán Loang – Khử đệ quy Vào: x0,y0,mau Tô( x0,y0); Q = {(x0,y0)}; while (Q ≠ Ф) { Pop(p);//lấy p từ Q for ( v = Kề(p)) if [v S && ChưaTô(v)] { Tô( v); Push(v);//đưa v vào Q } } 0 3 4 5 6 7 8 x 1 x 14 x x 16 6 15 x 18 8 2 7 17 x 25 13 5 1 3 9 19 24 12 4 10 20 x 2 3 x 4 5 6 8 9 25 2 0 7 Ví dụ: . trên BA xxp 1 AB xxp 2 BA yyp 3 AB yyp 4 - + - + + - + - - ++ - + + 4/4/2011 5 11 Thuật toán Liang-Barsky t 0 =0; dx=x B -x A ; t 1 =1; dy=y B -y B ; for (canh=14){ //duyệt lần lượt các cạnh //0 .tính p,q,r //1.cạnh. Nhật 1 CH 2. XÉN HÌNH, TÔ MÀU Nội dung 2  Xén hình 1. Xén đoạn thẳng vào hình chữ nhật Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky 2. Xén đoạn thẳng vào hình tròn 3. Xén đường tròn. ngoài ko vẽ / /xén được 1 tí //3.trong  ngoài //nằm ngoài ko vẽ / /xén được 1 tí switch (canh){ 1: p=-dx; q=x A -x min ; 2: p=dx; q=x A -x min ; 3: p=-dy; q=x A -x min ; 4: p=dy; q=x A -x min ; } r=q/p; } if

Ngày đăng: 02/08/2014, 05:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan