Đồ họa máy tính và các thuật toán cơ sở
1BÀI GIẢNGĐỒ HỌA MÁY TÍNHGV: Vũ Đức HuySĐT: 0912316373Bộ môn: HTTT-ĐHCNHNEMail: huyhaui@gmail.comThời lượng:Số tín chỉ: 03Lên lớp: 20TH: 25Bài tập lớn + Bảo vệ: 15 2BÀI GIẢNGĐỒ HỌA MÁY TÍNHCác điểm:Kiểm tra định kỳ: 02Kiểm tra thường xuyên: Không định trướcThi: Kết quả BTLChuyên cần:01 3Tài liệu tham khảo[1] James D.Foley, Andrie van Dam, Steven K.Feiner, Jonhn F. Hughes, Computer Graphics Principles and Practice, Addison Wesley, 1994.[2] Hoàng Kiếm, Dương Anh Đức, Lê Đình Duy, Vũ Hải Quân. Giáo trình cơ sở Đồ hoạ Máy tính, NXB Giáo dục, 2000.[3] Lê Tấn Hùng, Huỳnh Quyết Thắng. Kỹ thuật đồ hoạ máy tính, NXB khoa học và kỹ thuật, 2002.[4] Học viện công nghệ bưu chính viễn thông. Kỹ thuật đồ họa (lưu hành nội bộ)[5] Lương Chi Mai. Nhập môn Đồ họa máy tính, NXB Khoa học và kỹ thuật.[6] Steven Harrington, Computer Graphics A Programming Approach, McGraw Hill International Edition, 1987.[7] Gerald Farin, Curves and Surfaces for Computer Aided Geometric Design A Practical Guide, Academic Press Inc, 1990. 4CHƯƠNG 2CÁC THUẬT TOÁN CƠ SỞ 52.1. CÁC THUẬT TOÁN VẼ ĐƯỜNG THẲNG 62.1.1. Một số khái niệmĐiểm Điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ. Đối với hệ tọa độ hai chiều mỗi điểm được xác định bởi cặp tọa độ (x, y).Ngoài thông tin về tọa độ, điểm còn có thuộc tính là màu sắc. Thủ tục vẽ một điểm (x,y) với mầu c: Putpixel(x,y,c) 72.1.1. Một số khái niệmĐoạn thẳngBiểu diễn tường minh: y = f(x)Phương trình đoạn thẳng đi qua 2 điểm P (x1,y1) và Q(x2,y2):(y-y1)/( x-x1) = ( y2-y1)/( x2-x1)(y-y1)(x2-x1)=(x-x1)(y2-y1)(x2-x1)y=(y2-y1)x + y1(x2-x1) - x1(y2-y1)y = ((y2-y1)/(x2-x1))x + y1 - ((y2-y1)/(x2-x1))x1y = mx + bm = (y2-y1)/(x2-x1) Độ dốc hay hệ số góc của đườngb = y1- mx1 Đoạn chắn trên trục yΔy = mΔx (tức là khi x thay đổi thì y thay đổi theo) 82.1.1. Một số khái niệmĐoạn thẳngBiểu diễn tường minh: y = f(x) 92.1.1. Một số khái niệmĐoạn thẳngBiểu diễn không tường minh: Ax+By+C=0Ta có(y2-y1)x - (x2-x1)y + (x2-x1)y1 - (y2-y1)x1 = 0(y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0Tổng quát: Ax + By + C = 0Với:A = (y2-y1)B = -(x2-x1 )C = x2y1 - x1y2 102.1.1. Một số khái niệmĐoạn thẳngBiểu diễn thông qua tham số:P(t) = P1 + t(P2 - P1) t €[0,1]x(t) = x1 + t( x2 - x1 )y (t)= y1 + t(y2 - y1 ) [...]... Giải thuật DDA Thủ tục 27 2.1.4. Giải thuật Bresenham Đặt: d1= RS d2 = RP R 5 2.1. CÁC THUẬT TOÁN VẼ ĐƯỜNG THẲNG 29 2.1.4. Giải thuật Bresenham Tính d1: d1 = y (xi+1) -y i d1 = (m(x i+1 )+b)-y i d1 = m(x i +1)+b-y i R 18 2.1.3. Giải thuật DDA Giả sử vẽ được (x i ,y i ) Tiếp theo, chọn y i+1 là y i hay y i +1 dựa vào phương trình của đường thẳng d . 26 2.1.4. Giải thuật. .. tham số quyết định. Dấu của nó sẽ quyết định lựa chọn điểm tiếp theo. 20 2.1.3. Giải thuật DDA Lưu đồ thuật toán 24 2.1.4. Giải thuật Bresenham Cho phương trình đường thẳng d: y = mx+b dx = x 2 -x 1 dy = y 2 -y 1 m = dy/dx b = y 1 - mx 1 46 2.1.5. Giải thuật MidPoint Sơ đồ khối 22 2.1.3. Giải thuật DDA Nhận xét: Cải thiện tốc độ: Sử dụng công thức y i+1 = y i + m thay cho y... (sử dụng cộng số thực, làm tròn). 30 2.1.4. Giải thuật Bresenham Tính d2: d2 = y i +1-y( xi+1 ) d2 = y i +1-(m(x i +1)+b) d2 = y i +1-m(x i +1)-b R 41 2.1.5. Giải thuật MidPoint Cơ sở toán học: <0 nếu (x,y) nằm phía trên đường thẳng F(x,y) = 0 nếu (x,y) thuộc đường thẳng >0 nếu (x,y) nằm phía dưới đường thẳng 14 2.1.2. Giải thuật làm tròn Trường hợp d gần Ox Gán x=x 1 ;... dyx 1 +dy-dxy 1 -dx1/2+ x 2 y 1 -x 1 y 2 P 1 = y 2 x 1 -y 1 x 1 +dy-x 2 y 1 +x 1 y 1 -dx1/2+ x 2 y 1 -x 1 y 2 P 1 = dy-(1/2)dx Do chỉ xét dấu và để tránh chia hai: P 1 = 2dy-dx 4 CHƯƠNG 2 CÁC THUẬT TOÁN CƠ SỞ 35 2.1.4. Giải thuật Bresenham Tính P 1 : Thay điểm (x 1 ,y 1 ) vào P i P 1 =2dyx 1 – 2dxy 1 + c với c = 2dy + (2b-1)dx b = y 1 - mx 1 m = dy/dx P 1 =2dyx1 – 2dxy1 + 2dy + (2(y 1 - x 1 dy/dx)-1)dx P 1 ... y 1 - m*x 1 ; Lặp Putpixel(x,round(y),c); x = x+1; y = m*x+b Tới khi x =x 2 ; 37 2.1.4. Giải thuật Bresenham Thủ tục 16 2.1.2. Giải thuật làm tròn Nhận xét: Thao tác với số thực Sử dụng phép nhân, chia số thực Sử dụng hàm làm tròn Tốn bộ nhớ, chạy chậm 39 2.1.5. Giải thuật MidPoint Cho hai điểm (x 1 ,y 1 ) và (x 2 ,y 2 ) Phương trình đường thẳng dạng tổng quát: Ax... là R(x i +1,y). Chỉ có thể chọn S(x i +1,y i ) hoặc P(x i +1,y i +1) R 12 2.1.2. Giải thuật làm trịn Cho phương trình đường thẳng d: y = mx+b m = (y 2 -y 1 )/(x 2 -x 1 ) b = y 1 - mx 1 Trường hợp d//Oy Gán x=x 1 ; y =y 1 ; Lặp Putpixel(x,y,c); y = y+1; Tới khi y =y 2 ; 42 2.1.5. Giải thuật MidPoint Cách thực hiện: Đặt P p = F(M) = F(x p +1,y p +1/2) Nếu P p < 0 thì... TÍNH Các điểm: Kiểm tra định kỳ: 02 Kiểm tra thường xuyên: Không định trước Thi: Kết quả BTL Chuyên cần:01 25 2.1.4. Giải thuật Bresenham Khơng mất tính tổng qt, xét 0<m<1 Giả sử vẽ được (x i ,y i ) Vấn đề: Chọn điểm tiếp theo? R 44 2.1.5. Giải thuật MidPoint Nếu chọn NE thì trung điểm mới:M new (x p +2,y p +3/2) P newNE = A(x p +2)+B(y p +3/2)+C P newNE = A(x p +1)+B(y p +1/2)+C... điểm (x 1 ,y 1 ) và (x 2 ,y 2 ) Phương trình đường thẳng dạng tổng quát: Ax + By + C =0 Với dy = y 2 -y 1 , dx = x 2 -x 1 A = dy B= -dx C= x 2 y 1 -x 1 y 2 Đặt F(x,y) = Ax + By + C 33 2.1.4. Giải thuật Bresenham Vấn đề: Sau khi chọn điểm P hoặc S. Phải tính được P i+1 . Tính P i+1 : P i+1 = 2dyx i+1 – 2dxy i+1 + c P i+1 = 2dy(x i +1) – 2dxy i+1 + c Xét mối liên hệ giữa P i+1 và P i P i+1 -P i ... 45 2.1.5. Giải thuật MidPoint Tính P 1 : M(x 1 +1,y 1 +1/2) P 1 = A(x 1 +1)+B(y 1 +1/2)+C Thay: A = dy; B = -dx, C= x 2 y 1 -x 1 y 2 dy = y 2 -y 1 ; dx = x 2 -x 1 vào P 1 P 1 = dy(x 1 +1)-dx(y 1 +1/2)+ x 2 y 1 -x 1 y 2 P 1 . 1990. 4CHƯƠNG 2CÁC THUẬT TOÁN CƠ SỞ 52.1. CÁC THUẬT TOÁN VẼ ĐƯỜNG THẲNG 62.1.1. Một số khái niệmĐiểm Điểm là thành phần cơ sở được định nghĩa. Giáo trình cơ sở Đồ hoạ Máy tính, NXB Giáo dục, 2000.[3] Lê Tấn Hùng, Huỳnh Quyết Thắng. Kỹ thuật đồ hoạ máy tính, NXB khoa học và kỹ thuật, 2002.[4]