KỸ THUẬT ĐỒ HỌA Computer Graphics GV: Nguyễn

  • Размер: 1.9 Mегабайта
  • Количество слайдов: 58

Описание презентации KỸ THUẬT ĐỒ HỌA Computer Graphics GV: Nguyễn по слайдам

  KỸ THUẬT ĐỒ HỌA Computer Graphics GV: Nguyễn Quang Minh SN: 1976 ĐT: 0906289609 KỸ THUẬT ĐỒ HỌA Computer Graphics GV: Nguyễn Quang Minh SN: 1976 ĐT: 0906289609 Mail: NQMY 1976@gmail. com. . TT:

  NỘI DUNG CƠ BẢN Chương 1: Thuật toán vẽ hình cơ bản Chương 2: NỘI DUNG CƠ BẢN Chương 1: Thuật toán vẽ hình cơ bản Chương 2: Thuật toán tô màu Chương 3: Phép biến đổi trong đồ họa 2 chiều Chương 4: Tạo cửa sổ và cắt hình Chương 5: Đồ họa 3 chiều Chương 6: Quan sát ảnh 3 chiều Chương 7: Khử các mặt khuất và đường khuất

  TÀI LIỆU THAM KHẢO Nhập môn đồ họa máy tính – Nxb KHKT Lương TÀI LIỆU THAM KHẢO Nhập môn đồ họa máy tính – Nxb KHKT Lương Chi Mai – Huỳnh Thị Thanh Bình Đồ họa máy tính và Mô hình hóa hình học. Nxb Tp Hồ Chí Minh — Nguyễn Hữu Lộc. Kỹ thuật đồ họa — Nxb KHKT. Lê Tấn Hùng, Huỳnh Quyết Thắng. Computer Graphics ; Prentice-Hall, Inc. , Englewood Cliffs, New Jersey , 1986. Donald Hearn, M. Pauline Baker;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN NỘI DUNG CHÍNH. - Tổng Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN NỘI DUNG CHÍNH. — Tổng quan về đồ họa máy tính. — Thuật toán sinh đường thẳng: DDA, Bresenham, MLA. — Thuật toán sinh đường tròn: Bresenham, MCA. — Thuật toán sinh Elip.

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 1. Tổng quan về đồ Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 1. Tổng quan về đồ họa máy tính. K/n: Sử dụng máy tính để mô phỏng hình ảnh và chuyển động của các đối tượng thực tế. Hệ tọa độ: — Tọa độ thực: Gắn liền với vật thể — Liên tục, vô hạn. — Tọa độ hiển thị: Gắn với thiết bị hiển thị — Rời rạc, có giới hạn. — Tọa độ thực->tọa độ hiển thị: Rời rạc hóa, số hóa.

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Dựa vào phương trình đoạn thẳng. Cho 2 điểm: (x 1 , y 1 ), (x 2 , y 2 ). Mục đích: Xác định tọa độ các điểm cần vẽ trên màn hình để tạo thành đoạn thẳng đi qua 2 điểm trên. Xét các dạng đoạn thẳng sau: dy=0 dx dy dx TH 1: dy=0 TH 2: dx=0 TH 3: dx>dy X tỷ lệ thuận Y TH 4: dx>dy X tỷ lệ nghịch Y TH 5: dy>dx X tỷ lệ thuận Y TH 6: dy>dx X tỷ lệ nghịch Y

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Dựa vào phương trình đoạn thẳng. Trường hợp 1: Đoạn thẳng song trục X: dy=0. Giả sử x 1<x 2: X tăng dần, Y không đổi. (x 1, y 1) (x 2, y 2) THUẬT TOÁN: Bước 1: x=x 1 ; y=y 1 ; Bước 2: Vẽ điểm (x, y); Bước 3: x=x+1; Bước 4: Nếu x<=x 2 thì: Bước 2; Bước 5: Kết thúc. Begin x=x 1 ; y=y 1; x<=x 2 End No. Yes Putpixel(x, y) x=x+1;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Dựa vào phương trình đoạn thẳng. Trường hợp 2: Đoạn thẳng song trục Y: dx=0. Giả sử y 1<y 2: Y tăng dần, X không đổi. (x 1, y 1) (x 2, y 2) THUẬT TOÁN: Bước 1: x=x 1 ; y=y 1 ; Bước 2: Vẽ điểm (x, y); Bước 3: y=y+1; Bước 4: Nếu y<=y 2 thì: Bước 2; Bước 5: Kết thúc. Begin x=x 1 ; y=y 1; y<=y 2 End No. Yes Putpixel(x, y) y=y+1;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Dựa vào phương trình đoạn thẳng. Trường hợp 3: dx>dy; X tỷ lệ thuận Y. Giả sử: x 1<x 2. — Số điểm cần vẽ: dx+1. — Biên độ rời rạc: 1 đơn vị theo trục X. (x 1, y 1) (x 2, y 2) x ky k Round(y k ) x 1 , y 1 x 2 , y 2 K x k+1= x k +112 1 yy yy xx xx 11 12 12 )( yxx xx yy y kk * Tư tưởng thuật toán: Cho x tăng dần từ x 1 đến x 2. Dựa vào phương trình đoạn hẳng để tìm y. Vẽ các điểm (x, round(y)). Cho đoạn thẳng đi qua 2 điểm: (x 1 , y 1 ), (x 2 , y 2 ). Phương trình đoạn thẳng: Với mỗi x k ta tìm được y k :

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Cho đoạn thẳng đi qua 2 điểm: (x 1 , y 1 ), (x 2 , y 2 ). THUẬT TOÁN: Bước 1: x=x 1 ; y=y 1 ; Bước 2: Vẽ điểm (x, Round(y)); Bước 3: x=x+1; y=(x-x 1)*(y 2 -y 1)/(x 2 -x 1)+y 1; Bước 4: Nếu x<=x 2 thì: Bước 2; Bước 5: Kết thúc. Begin x=x 1 ; y=y 1; x<=x 2 End No. Yes Putpixel(x, roun d(y)) x=x+1; y=(x-x 1)*(y 2 -y 1)/ (x 2 -x 1)+y 1;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. a) Thuật toán cơ bản: Cho đoạn thẳng đi qua 2 điểm: (x 1 , y 1 ), (x 2 , y 2 ). Trường hợp 5, 6: dy>dx; — Số điểm cần vẽ: dy+1. — Biên độ rời rạc: 1 đơn vị theo trục Y. NHẬN XÉT: Ưu điểm: Đơn giản, dễ hiểu. Nhược điểm: Tốc độ xử lý chậm. dx dy dx TH 5: dy>dx X tỷ lệ thuận Y TH 6: dy>dx X tỷ lệ nghịch Y

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. b) Thuật toán DDA (Digital Differential Analyzer ): Khử phép nhân chia số thực trong vòng lặp (thay bằng phép cộng): yk =(x-x 1 ) * (y 2 -y 1 ) / (x 2 -x 1 )+y 1. Giả sử đã tìm được điểm K(x k , yk ). Điểm tiếp theo K+1 có tọa độ: x k+1 =xk +dx; y k+1 =yk +dy ; Trong đó: dx=1 (biên độ rời rạc). dy=(y 2 -y 1 )/(x 2 -x 1 ) x ky k x k+1 y k+1 d x=1 d y K K+

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. b) Thuật toán DDA (Digital Differential Analyzer ): THUẬT TOÁN: Bước 1: x=x 1 ; y=y 1 ; dy=(y 2 -y 1 )/(x 2 -x 1 ); Bước 2: Vẽ điểm (x, y); Bước 3: x=x+1; y=y+dy; Bước 4: Nếu x<=x 2 thì: Bước 2; Bước 5: Kết thúc. Begin x=x 1 ; y=y 1; dy=(y 2 -y 1)/ (x 2 -x 1); x<=x 2 End No. Yes Putpixel(x, y) x=x+1; y=y+dy;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. c) Thuật toán Bresenham: (Khử hoàn toàn số thực): Trường hợp 3: dx>dy; X tỷ lệ thuận Y. Giả sử: x 1<x 2. — Số điểm cần vẽ: dx+1. — Biên độ rời rạc: 1 đơn vị theo trục X. Tư tưởng thuật toán: Sử dụng công thức truy hồi: Dựa vào điểm vừa vẽ để xác định điểm tiếp theo. X i+1 =X i +1 y i+1 K i NM Y i +1 K I+1 d 2 d 1 Phân tích, xây dựng thuật toán: Giả sử điểm K i có tọa độ vẽ là (X i , Y i ). Điểm tiếp theo K (I+1) sẽ là: N(x i +1, y i ) nếu d 1 <d 2 (d 1 -d 2 <0) M(x i +1, y i +1) nếu d 1 ≥ d 2 (d 1 -d 2 ≥ 0). d 1 -d 2 =?

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. c) Thuật toán Bresenham: (Khử hoàn toàn số thực) x M =x N =x K(i+1) =X i +1; y N =Y i ; y M =Y i +1; y K(i+1) =(X i +1 -X 1 )( Δ y/ Δ x )+Y 1 ; d 1 =y K(i+1) -y N ; d 2 =y M -y K(i+1) ; d 1 -d 2 =(2 Δ y (x i +1 -x 1 )-2 y i Δ x+2 y 1 Δ x- Δ x )/ Δ x Vì Δ x>0 nên dấu của (d 1 -d 2)là dấu của Δ x(d 1 -d 2 ). Đặt P i = Δ x(d 1 -d 2 ). P i =2 Δ y ( x i +1 -x 1 )-2 y i Δ x+2 y 1 Δ x- Δ x. P i <0 chọn N » P i+1 = 2 Δ y ( x i +2 -x 1 )-2 y i Δ x+2 y 1 Δ x- Δ x. » P i+1 -P i = 2 Δ y P i ≥ 0 chọn M » P i+1 = 2 Δ y ( x i +2 -x 1 )-2( y i +1 ) Δ x+2 y 1 Δ x- Δ x. » P i+1 -P i = 2 Δ y-2 Δ x Tại điểm bắt đầu (x 1 , y 1 ) ta có P 1 =2 Δ y- Δ x X i+1 =X i +1 y K(i+1) K i NM Y i +1 K I+1 d 2 d 1 Const

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. c) Thuật toán Bresenham: (Khử hoàn toàn số thực) Thuật toán: Bước 1: dx=x 2 -x 1 ; dy=y 2 -y 1 ; P M =2 dy-2 dx; P N =2 dy; p=2 dy-dx; x=x 1 ; y=y 1 ; Bước 3: Vẽ điểm (x, y) Bước 4: x=x+1; Bước 5: Nếu p>=0 thì: y=y+1; p=p+P M ; ngược lại: p=p+P N ; Bước 6: Nếu x x 2 thì quay lại Bước 3; Bước 7: Kết thúc Begin dx=x 2 -x 1 ; dy=y 2 -y 1 ; P M =2 dy-2 dx; P N =2 dy; p=2 dy-dx; x=x 1 ; y=y 1 ; x=0 No. Yes p=p+P N ; Putpixel(x, y); x=x+1;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. Áp dụng thuật toán Bresenham cho đoạn thẳng: A(9, 3); B(16, 7) 9 10 11 12 13 14 1534567 16 Begin dx=7; dy=4; P M =-6; P N =8; p=1; x=9, y=3; Putpixel( 9, 3 ). p(1)>0: p=1 -6=-5; y=4; x=10<16; Putpixel( 10, 4 ); p(-5)<0: p=-5+8=3; y=4; x=110: p=3 -6=-3; y=5; x=12<16; Putpixel( 12, 5 ); p(-3)<0: p=5; y=5, x=130: p=-1; y=6; x=14<16; Putpixel( 14, 6 ); p(-1)<0: p=7; y=6; x=150: p=1; y=7; x=16=16; Putpixel( 16, 7 ); …. . x=17>16 » end; Begin dx=x 2 -x 1 ; dy=y 2 -y 1 ; P M =2 dy-2 dx; P N =2 dy; p=2 dy-dx; x=x 1 ; y=y 1 ; x=0 No. Yes p=p+P N ; Putpixel(x, y); x=x+1;

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. d) Thuật toán MLA: (Midpoint Line Algorithm). Dựa vào phương trình đường thẳng d: ax+by+c=0; Xét vị trí của đường thẳng d với điểm M: d i =F(M)>0 : đường thẳng nằm phía trên M. d i =F(M)=0 : đường thẳng đi qua M. d i =F(M)<0 : đường thẳng nằm phía dưới M. M(x i +1, y i +½) » d i =F(M)=a( x i +1 )+b( y i + ½ )+c. Nếu d i <0 chọn D » d i+1 =a( x i +2 )+b( y i +½ )+c. » d D =d i+1 -d i =a; Nếu d i ≥ 0 chọn U » d i+1 =a( x i +2 )+b( y i +3/2 )+c. » d U =d i+1 -d i =a+b; Tại điểm x 1 , y 1 ta có d 1 =a(x 1 +1)+b(y 1 + ½ )+c. Theo phương trình đường thẳng thì a=y 2 -y 1 ; b=-(x 2 -x 1 ); c=y 1 x 2 -x 1 y 2. » d 1= a+b/2. Khử phép chia 2: d 1 =2*d 1 = 2(y 2 -y 1 )-(x 2 -x 1 ); d D =2*d D = 2(y 2 -y 1 ); d U =2*d U = 2(y 2 -y 1 )-2(x 2 -x 1 ) x i+1 =x i +1 y iy i +1 d MU

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. NHẬN XÉT: * Thuật toán cơ bản, DDI : Dựa vào phương trình đoạn thẳng. Ưu điểm: Đơn giản, dễ xây dựng. Nhược điểm: Tốc độ xử lý chậm. * Thuật toán BRESENHAM, MLA : Dựa vào điểm vừa vẽ để tìm điểm tiếp theo. Ưu điểm: Tốc độ xử lý rất nhanh. Nhược điểm: Xây dựng phức tạp, cần nhiều bộ nhớ máy.

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 2. Thuật toán sinh đường thẳng. BÀI TẬP VỀ NHÀ: 1. Xây dựng thuật toán Bresenham cho đoạn thẳng có hệ số góc m: x i+1 =x i +1 y i -1 y im(0, -1] y i+1 x i +1 y iy i+1 =y i +1 m > 1 x i+1 x i -1 x iy iy i+1 =y i +1; m < -1 x i+1 2. Áp dụng các thuật toán sinh đường thẳng để tìm tọa độ các điểm cần vẽ cho đoạn thẳng đi qua 2 điểm: A(7, 5), B(13, 10)

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. a) Thuật toán cơ bản: Dựa vào phương trình đường tròn: x 2 +y 2 =R 2 hoặc phương trình tham số: x=R*Cos( ) y=R*Sin( ). Vì đường tròn có tính chất đối xứng nên chỉ cần tính toán cung 1/8 rồi lấy 8 điểm đối xứng: (x, y), (x, -y), (-x, -y), (y, x), (y, -x), (-y, -x). Xét cung 1/8 thứ II: có Δ x>y Δ nên biên độ rời rạc 1 đơn vị theo trục X. Với mỗi x i tính được vẽ 8 điểm (x i , round(y i )) IIIIII IV V VI VIII (R, 0)(0, R) 2 2 R, 2 2 R 22 iix. Ry

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. a) Thuật toán cơ bản: 22 x. Ry. THUẬT TOÁN: Bước 1: x=0; y=R; Bước 2: Vẽ 8 điểm (x, y); Bước 3: x=x+1; Bước 4: Nếu thì: Bước 2; Bước 5: Kết thúc. Begin x=0; y=R; End No. Yes Vẽ 8 điểm(x, y) x=x+1; 2 2 Rx

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. b) Thuật toán trung điểm MCA: (Midpoint Circle Algorithm). K-Xét cung 1/8 thứ II: có Δ x>y Δ nên chọn biên độ rời rạc 1 đơn vị theo trục X. X tỉ lệ nghịch với Y. Giả sử K(x i , y i ) là điểm vừa vẽ xong. Điểm K (i+1) tiếp theo sẽ là U hoặc D phụ thuộc vào việc đường tròn nằm trên hay dưới điểm M. Xét vị trí điểm M với đường tròn F(M)=x M 2 +y M 2 -R 2 F(M)0 : M nằm ngoài đường tròn, chọn D. F(M)=0 : đường tròn đi qua M, chọn D. D UY i -1 X i x i+1= X i +1 M

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. b) Thuật toán trung điểm: K Điểm M i (x i +1, y i -½): đặt d i =F(M)=(x i + 1 ) 2 +(y i — ½ ) 2 -R 2. Nếu d i <0 chọn U: — Điểm M (i+1) có tọa độ (x i + 2 , y i — ½ ). d i+1 =(x i + 2 ) 2 +(y i — ½ ) 2 -R 2 » d i+1 -d i = 2 x i +3=d U Nếu d i ≥ 0 chọn D: — Điểm M (i+1) có tọa độ (x i + 2 , y i -1½ ). d i+1 =(x i + 2 ) 2 +(y i — 1½ ) 2 -R 2 » d i+1 -d i = 2 x i -2 y i +5 = d D d 1 =F(0, R) » d 1 =1¼-R; Vì d chỉ tăng theo số nguyên nên việc bớt ¼ sẽ không làm thay đổi dấu của d » d 1 =1 -R. D UY i -1 X i x i+1= X i +1 MM M (i+1)X i +2 M (i+1)

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. b) Thuật toán trung điểm: THUẬT TOÁN: Bước 1: X=0; Y=R; d=1 -R; Bước 2: Vẽ 8 điểm(x, y); Bước 3: Nếu d<0 thì: d: =d+2 x+3; x: =x+1; Ngược lại: d: =d+2(x-y)+5 x: =x+1; y: =y-1; Bước 4: Nếu x<=y thì: Bước 2; End; Begin x=0; y=R; d=1 -R; x<=yd=d+2 x+3; x=x+1; End No Yesd<0 No. Yes d=d+2(x-y) +5; x=x+1; y=y-1 ; Vẽ 8điểm(x, y );

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 3. Thuật toán sinh đường tròn. c) Ví dụ áp dụng giải thuật với R=9: x=0, y=9, d=-8, vẽ 8điểm( 0, 9 ) d=-8<0, d=-5, x=1 1<9 vẽ 8điểm( 1, 9 ) d=-5<0, d=0, x=2 2<9 vẽ 8điểm( 2, 9 ) d=0, d=-9, x=3, y=8 3<8 vẽ 8điểm( 3, 8 ) d=-9<0, d=0, x=4, 4<8 vẽ 8điểm( 4, 8 ) d=0, d=-3, x=5, y=7 5<7 vẽ 8điểm( 5, 7 ) d=-3<0, d=10, x=6, 60, d=13, x=7, y=6, 7>6: kết thúc. XY OBegin x=0; y=R; d=1 -R; x<=yd=d+2 x+3; x=x+1; End No Yesd<0 No. Yes d=d+2(x-y) +5; x=x+1; y=y-1 ; Vẽ 8điểm(x, y );

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 4. Thuật toán Van. Aken Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 4. Thuật toán Van. Aken sinh elip. Phân tích dựa theo phương pháp trung điểm Bước 1: x=0; y=b; d=4 b 2 -4 a 2 b+a 2 ; Bước 2: Vẽ 4 điểm(x, y); Bước 3: Nếu d=2 b 2 (x+1) thì quay về Bước 2; Bước 5: d=b 2 (2 x+1) 2 +4 a 2 (y-1) 2 -4 a 2 b 2 Bước 6: Vẽ 4 điểm (x, y); ab O a 2 (2 y-1)=2 b 2 (x+1) Bước 7: Nếu d=0 thì về bước 6; Kết thúc.

  Chương 1:  THUẬT TOÁN VẼ HÌNH CƠ BẢN 5. Vẽ đường conic. Phương Chương 1: THUẬT TOÁN VẼ HÌNH CƠ BẢN 5. Vẽ đường conic. Phương trình tổng quát của đường conic có dạng. Ax 2 + Bxy + Cy 2 + Dx + Ey + F = 0. Áp dụng ý tưởng của thuật toán Midpoint để vẽ: — Bước 1: Dựa vào dáng điệu và phương trình đường cong, để xem thử có thể rút gọn phần đường cong cần vẽ hay không. — Bước 2: Tính đạo hàm, từ đó phân thành các vùng vẽ. . Nếu 0 ≤ f ‘(x) ≤ 1 : x i+1 = x i + 1; y i+1 = y i (hoặc = y i +1) . Nếu -1≤ f ‘(x) ≤ 0 : x i+1 = x i + 1; y i+1 = y i (hoặc = y i — 1) . Nếu f ‘(x) > 1 : y i+1 = y i + 1; x i+1 = x i (hoặc = x i +1) . Nếu f ‘(x) < -1 : y i+1 = y i + 1; x i+1 = x i (hoặc = x i +1) — Bước 3 : Tính P i cho từng trường hợp để quyết định f '(x) dựa trên dấu của P i thường là hàm được xây dựng từ phương trình đường cong. Việc chọn Pi cần chú ý sao cho các thao tác tính Pi sau này hạn chế phép toán trên số thực. — Bước 4 : Tìm mối liên quan của P i+1 và P i bằng cách xét hiệu P i+1 — P i — Bước 5 : Tính P 0 và hoàn chỉnh thuật toán.

  Chương 2:  THUẬT TOÁN TÔ MÀU NỘI DUNG CHÍNH. - Thuật toán tô Chương 2: THUẬT TOÁN TÔ MÀU NỘI DUNG CHÍNH. — Thuật toán tô màu loang. — Thuật toán tô màu đường biên. — Thuật toán tô màu đa giác.

  Chương 2:  THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang. a) Chương 2: THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang. a) Khái niệm điểm lân cận (liên thông). — Lân cận 4: kề nhau theo phương đứng hoặc ngang — Lân cận 8: kề nhau theo phương đứng, ngang hoặc chéo b) Khái niệm miền tô: — Miền tô phải là vùng khép kín theo lân cận 4 hoặc 8. — Miền trong: Vùng tô có 1 màu đồng nhất, tất cả các điểm khác màu được coi là biên vùng tô. — Miền bao đóng: Vùng tô có biên là 1 màu xác định.

  Chương 2:  THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang - Chương 2: THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang — Flood. Fill. a) Xét vùng tô theo miền bao đóng: Màu tô là Fill. Color và màu viền là Border. Color. Sử dụng kỹ thuật đệ quy để xét tất cả các điểm trong vùng tô: — Xét điểm P thuộc vùng tô: — Nếu Color(P) ≠Fill. Color và Color(P) ≠Border. Color thì: *Tô màu cho điểm P. *Xét 4 điểm lân cận (trên, dưới, trái, phải) của P theo phương pháp tương tự. — Quá trình kết thúc khi tất cả các điểm được tô.

  Chương 2:  THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang - Chương 2: THUẬT TOÁN TÔ MÀU 1. Thuật toán tô màu loang — Flood. Fill. b) Ví dụ: Tô màu cho vùng bao đóng, điểm xuất phát: 1 — Màu tô: Đỏ; Màu biên: Đen.

  Chương 2:  THUẬT TOÁN TÔ MÀU 2. Thuật toán tô màu tìm biên-Boundary. Chương 2: THUẬT TOÁN TÔ MÀU 2. Thuật toán tô màu tìm biên-Boundary. Fill. a) Xét vùng tô theo miền bao đóng: Màu tô là Fill. Color và màu viền là Border. Color. Sử dụng kỹ thuật đệ quy để tô từng hàng trong vùng tô: — Xét điểm P thuộc vùng tô: — Nếu Color(P) ≠Fill. Color và Color(P) ≠Border. Color thì: *Tìm điểm bên trái nhất và điểm bên phải nhất của hàng chứa điểm P, tô màu hàng vừa tìm. *Xét tương tự đối với các điểm bên trên hàng vừa tìm. *Xét tương tự đối với các điểm bên dưới hàng vừa tìm. — Quá trình kết thúc khi tất cả các điểm được tô.

  Chương 2:  THUẬT TOÁN TÔ MÀU 2. Thuật toán tô màu tìm biên-Boundary. Chương 2: THUẬT TOÁN TÔ MÀU 2. Thuật toán tô màu tìm biên-Boundary. Fill. b) Ví dụ: Tô màu cho vùng bao đóng, điểm xuất phát: 1 — Màu tô: Đỏ; Màu biên: Đen.

  Chương 2:  THUẬT TOÁN TÔ MÀU 3. Thuật toán tô màu đa giác-Giải Chương 2: THUẬT TOÁN TÔ MÀU 3. Thuật toán tô màu đa giác-Giải thuật dòng quét-Scanline. — Cho dòng quét ngang chạy từ Ymin đến Y max của đa giác. — Với mỗi dòng quét tìm các giao điểm với cạnh đa giác. — Với các giao điểm tìm các đoạn nằm trong đa giác để tô màu.

  Chương 2:  THUẬT TOÁN TÔ MÀU 4. Nhận xét. - Thuật toán tô Chương 2: THUẬT TOÁN TÔ MÀU 4. Nhận xét. — Thuật toán tô màu loang và tô màu biên có thể tô cho vùng có hình dạng bất kỳ , phụ thuộc vào màu hiện trạng của vùng cần tô. — Thuật toán tô màu loang đơn giản nhưng tốn bộ nhớ , dễ tràn bộ nhớ. — Thuật toán tô màu tìm biên phức tạp hơn nhưng tiết kiệm bộ nhớ. — Thuật toán tô màu cho các hình học cơ bản và đa giác không phụ thuộc vào màu hiện trạng của vùng tô. Xây dựng phức tạp hơn.

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU NỘI DUNG CHÍNH. - Các phép Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU NỘI DUNG CHÍNH. — Các phép biến đổi cơ bản: Tịnh tiến, quay, tỷ lệ. — Hệ tọa độ thuần nhất, ma trận biến đổi thuần nhất. — Ma trận biến đổi tổng hợp.

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 1. Khái niệm cơ bản: - Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 1. Khái niệm cơ bản: — Biến đổi hình học là việc mô phỏng sự biến đổi của các đối tượng đồ họa trong thực tế: Di chuyển, xoay, thay đổi hình dạng… — Phép biến đổi Affine là 1 ánh xạ P’ của điểm P theo hệ phương trình: P’ x =a*P x +b*P y +T x P’ y =c*P x +d*P y +T y * Tính chất của phép biến đổi Affine: — Bảo toàn tính chất thẳng hàng. — Bảo toàn tính chất song. — Bảo toàn tính chất tỷ lệ.

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ bản: a) Phép tịnh tiến : Di chuyển điểm P(x, y)khoảng cách (tx, ty). Điểm P’(x’, y’): x’=x+T x ; y’=y+T y ; b) Phép quay : Quay điểm P quanh gốc tọa độ 1 góc : Điểm P’(x’, y’): x’=x*cos( )-y*sin( ); y’=x*sin( )+y*cos( ); x x’yy’ T y T x. P P’ O x x’yy’ P’ O P )()( , ‘, ‘ Cos. Sin. Cos yxyx

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ bản: c) Phép co dãn : Thay đổi tọa độ từng trục lần lượt theo 1 tỷ lệ nhất định Điểm P’(x’, y’): x’=x*S x ; y’=y*S y ; S x =S y : Phóng to, thu nhỏ. S x =1; S y =-1: Đối xứng qua trục X. S x =-1; S y =1: Đối xứng qua trục Y. S x =S y =-1: Đối xứng qua gốc O x x’=3 xyy’=2 y P P’ O x’=x y’=-y y P P’O xy’=y PP’ O x’=-x x P P’ Ox’=-x y y’=-yy x. SS yxyx 0 0 , ‘, ‘

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ bản: d) Phép biến dạng : Làm méo hình dạng theo trục: Biến dạng theo trục X : P’(x’, y’): x’=x+H*y; y’=y; Biến dạng theo trục Y : P’(x’, y’): x’=x; y’=H*x+y; Biến dạng theo 2 trục : P’(x’, y’): x’=x+H x *y; y’=H y *x+y; xy P O x’y’=y P’ O x’=xy’ P’ O x’y’ P’ O 11 , ‘, ‘ x y H H yxyx

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 2. Các phép biến đổi cơ bản: e) Phép biến đổi tổng hợp: Bất kỳ 1 phép biến đổi phức tạp nào cũng có thể phân tích thành nhiều phép biến đổi cơ bản. Để mô phỏng các phép biến đổi phức tạp ta sử dụng nhiều phép biến đổi cơ bản: Ví dụ : Quay điểm B(x B , y B ) quanh điểm A(x A , y A ) 1 góc : Sử dụng 3 phép biến đổi cơ bản: — Tịnh tiến tọa độ điểm B khoảng cách (-x A , -y A ). (cho A trùng gốc tọa độ) — Quay điểm B quanh gốc tọa độ góc . — Tịnh tiến tọa độ điểm B khoảng cách (x A , y A ). x Bx’ By By’ B B’ O B A x Ay

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 3. Tọa độ thuần nhất, ma Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 3. Tọa độ thuần nhất, ma trận thuần nhất: Phép các biến đổi: Quay, co dãn, biến dạng đều có thể biểu diễn bằng 1 ma trận biến dạng 2 x 2. Tuy nhiên, phép tịnh tiến lại không biểu diễn được. Mở rộng ma trận 3 x 3 để biểu diễn: 1 010 001 1, , 1, ‘, ‘ Ty. Txyxyx 100 0()() 1, , 1, ‘, ‘ Cos. Sin. Cos yxyx 100 00 00 1, , 1, ‘, ‘ Sy. Sx yxyx 100 01 01 1, , 1, ‘, ‘ Hx Hy yxyx Ma trận tịnh tiến (Tx, Ty): Ma trận quay (góc ): Ma trận co dãn (Sx, Sy) Ma trận biến dạng(Hx, Hy):

  Chương 3:  PHÉP BIẾN ĐỔI 2 CHIỀU 4. Ma trận biến đổi tổng Chương 3: PHÉP BIẾN ĐỔI 2 CHIỀU 4. Ma trận biến đổi tổng hợp Phép biến đổi tổng hợp có thể biểu diễn bằng 1 ma trận biến đổi duy nhất là tích của các ma trận biến đổi cơ bản. Điểm A qua các phép biến đổi: Tịnh tiến: A*|T|=B. Quay: B*|R|=C. Co dãn: C*|S|=D. Có thể thay bằng 1 ma trận duy nhất: |M|=|T|*|R|*|S| A*|M|=D;

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing a) Khái niệm: - Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing a) Khái niệm: — Cửa sổ (Window): Đối tượng đồ họa thực có kích thước và hình dạng bất kỳ, khi thể hiện đối tượng có thể vẽ toàn bộ hoặc 1 phần đối tượng. Cửa sổ là giới hạn 1 vùng để hiển thị đối tượng sao cho phù hợp. — Khung hiển thị (Viewport): Khung hiển thị là vùng để vẽ các đối tượng trên màn hình của thiết bị hiển thị. Trên màn hình của thiết bị hiển thị có thể có nhiều Viewport. Mỗi Viewport hiển thị 1 Window khác nhau. Windows Viewports

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Ma trận Twv — Hiển thị đối tượng: Tọa độ thực->Tọa độ thiết bị chuẩn->Tọa độ thiết bị hiển thị. (Tọa độ thiết bị chuẩn có kích thước 1 x 1 đơn vị) — Trong không gian thực có Window (X W min, Y W min, X W max, Y W max). — Trên màn hình máy tính có Viewport(X V min, Y V min, X V max, Y V max). — Tính toán ma trận tổng hợp Twv để biến đổi các điểm từ tọa độ thực lên màn hình. Tọa độ màn hình là tọa độ nghịch: O X Y OY X

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Ma trận Twv O XY X W min. YWm in O XY 11 O XY O X YTịnh tiến về gốc Co dãn về thiết bị chuẩn: 1 x 1 Co dãn về Viewport Đảo ngược trục Y Tịnh tiến về Viewport. Xác định Window

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Ma trận Twv: 1 010 001 minmin WW YX 100 010 001 WW dy dx 100 00 00 VV dydx 100 010 001 1 010 001 maxmin VV YXTịnh tiến về gốc: (-X w min, -Y w min) Co dãn về thiết bị chuẩn (1/dx W , 1/dy W ) Co dãn về Viewport (dx V , dy V ) Đảo ngược trục Y: (1, -1) Tịnh tiến về Viewport: (X V min, Y V max)

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing 1 010 001 100 Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing 1 010 001 100 00 00 100 01 0 001 1 010 001 maxminminmin VVVV WW WW YXdydx YX b) Chuyển đổi Window-Viewport: Ma trận Twv: 1 00 00 minmaxminmin W V WV W VW V dy dy YY dx dx XX dy dy dx dx Twv

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Chương 4: CỬA SỔ VÀ CẮT HÌNH 1. Windowing b) Chuyển đổi Window-Viewport: Ma trận Twv: Ví dụ: — Window(90, 140, 120) — Viewport(5, 5, 30, 20) — Cho đoạn thẳng qua 2 điểm A(100, 100) và B(130, 110). Tìm tọa độ 2 điểm cần vẽ trên màn hình? dx W =140 -90=50; dy W =120 -90=30; dx V =30 -5=25; dy V =20 -5=15; 16540 05, 00 005, 0 Twv 11510 16540 05, 00 005, 0 1100100′ A 11025 16540 05, 00 005, 0 1110130′

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. - Loại bỏ Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. — Loại bỏ phần đối tượng không thuộc cửa sổ. Tính toán và tìm phần đối tượng thuộc cửa sổ để vẽ. a) Thuật toán Cohen-Sutherland clipping đoạn thẳng. — Cho cửa sổ (x min , y min , x max , y max ). — Cho đoạn thẳng đi qua 2 điểm P(x P , y P ), Q(x Q , y Q ). — Xác định phần đoạn thẳng cần vẽ. *Mã vùng của 1 điểm P(x, y): P. ma=b 4 b 3 b 2 b 1 — Nếu xx max : b 3 =1 ngược lại b 3 =0. — Nếu yy max : b 1 =1 ngược lại b 1 =0. -> P nằm trong cửa sổ khi P. ma=0000 X min X maxy miny max

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Cohen-Sutherland clipping đoạn thẳng. — P và Q cùng nằm trong cửa sổ khi: P, Qmã=0000 hay: P. mã or Q. mã=0000. — P và nằm cùng 1 phía của cửa sổ (nằm ngoài cửa sổ) khi có cùng 1 cặp bit tương ứng bằng 1: P. Mã and Q. mã ≠ 0. — Trường hợp còn lại PQ có thể cắt cửa sổ hoặc ko, và chắc chắn có 1 điểm nằm ngoài cửa sổ. — Giả sử P nằm ngoài cửa sổ, xét P. mã: Nếu b 4 =1. P nằm bên trái X min. Vì PQ không cùng 1 phía cửa sổ nên PQ cắt đường X min tại điểm M. Loại bỏ PM, xét lại từ đầu với đoạn MQ. Xét tương tự khi P nằm bên trên, dưới, phải của cửa sổ. X min X maxy miny max 00000001 00101001 1010 01000101 0110 P M Q

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Cohen-Sutherland clipping đoạn thẳng. 1. Tính P. mã và Q. mã. 2. Nếu P. mã or Q. mã=0000 thì vẽ đoạn PQ. Kết thúc. 3. Nếu P. Mã and Q. mã ≠ 0 thì kết thúc. 4. Hoán đổi sao cho P. mã ≠ 0. 5. Xét P. mã: — Nếu b 4 =1 thì tìm M=PQ giao X min — Nếu b 3 =1 thì tìm M=PQ giao X max — Nếu b 2 =1 thì tìm M=PQ giao Y min — Nếu b 1 =1 thì tìm M=PQ giao Y max — Thay P bằng M. Xét lại từ đầu với PQ. X min X maxy miny max 00000001 00101001 1010 01000101 0110 P M Q

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Liang-Barsky clipping đoạn thẳng. — Dựa vào phương trình tham số của đoạn thẳng. X=x 1 +T*(x 2 -x 1 )=x 1 +T*d X. Y=y 1 +T*(y 2 -y 1 )=y 1 +T*d Y. {T=[0. . 1]} — Điểm P(x P , y P ) nằm trong cửa sổ khi: Xmin ≤x 1 +T P *d X ≤Xmax. Xmin ≤y 1 +T P *d Y ≤Xmax. Hay: (-d X ) *T P ≤ x 1 -Xmin. d X *T P ≤ Xmax-x 1 (-d Y ) *T P ≤ y 1 -Ymin. d Y *T P ≤ Ymax-y 1 P k *T P ≤ Q k (k=1, 2, 3, 4). Cả đoạn thẳng sẽ nằm trong cửa sổ khi P k *T ≤ Q k (k=1, 2, 3, 4) đúng với mọi T=[0, 1]. x 1, y 1 x 2, y 2 T=0 T=1 T>1 T<

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Liang-Barsky clipping đoạn thẳng. — Nếu Pk=0, đoạn thẳng sẽ song với cạnh của cửa sổ. Như vậy, nếu Qk tương ứng =0, đoạn thẳng sẽ cắt cửa sổ=> đi tìm đoạn nằm trong: +Trường hợp x 1=x 2 (song trục Y): Đổi chỗ sao cho y 1<y 2. Nếu y 1Ymax thì y 2=Ymax. +Trường hợp y 1=y 2 (song trục X): Đổi chỗ sao cho x 1<x 2. Nếu x 1Xmax thì x 2=Xmax. Ymin. Ymaxy 2 Xmin Xmaxx

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Liang-Barsky clipping đoạn thẳng. — Nếu Pk ≠ 0, đoạn thẳng sẽ cắt các cạnh (kéo dài) tương ứng của cửa sổ tại vị trí T. Khi T1 điểm cắt sẽ nằm ngoài đoạn thẳng về phía x 2. Khi T=[0, 1] điểm cắt sẽ nằm trong đoạn thẳng. Khi Pk=Tk. Lấy Tmin=max (T, Tk) Khi Pk>=0 đoạn TTmax, không có đoạn nào trong cửa sổ. Nếu Tmin<Tmax, đoạn nằm trong cửa sổ là Tmin, Tmax.

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Liang-Barsky clipping đoạn thẳng. — Thuật toán: Tmin=0, Tmax=1; Tính P 1=-(x 2 -x 1); Q 1=x 1 -Xmin. P 2=-P 1; Q 2=Xmax-x 1. P 3=-(y 2 -y 1) Q 3=y 1 -Ymin. P 4=-P 3 Q 4=Ymax-y 1. Nếu x 1=x 2 thì: Đổi chỗ sao cho y 1<y 2. Nếu y 1Ymax thì y 2=Ymax. Vẽ đoạn(x 1, y 1, x 2, y 2) Nếu y 1=y 2 thì: Đổi chỗ sao cho x 1<x 2. Nếu x 1Xmax thì x 2=Xmax. Vẽ đoạn(x 1, y 1, x 2, y 2)

  Chương 4:  CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Chương 4: CỬA SỔ VÀ CẮT HÌNH 2. Clipping-Xén tỉa. a) Thuật toán Liang-Barsky clipping đoạn thẳng. — Thuật toán: Nếu P 1 và P 30 thì. — K=1. T=Qk/Pk. — Nếu Pk=0 thì Tmax=min(Tmax, T). — K=K+1. — Nếu K<=4 thì tính lại T và tìm Tmin, Tmax. Nếu Tmin< Tmax thì vẽ đoạn (Tmin, Tmax). KT