Bài giảng Chương 10: Các giải thuật nâng cao
Số trang: 40
Loại file: ppt
Dung lượng: 547.00 KB
Lượt xem: 19
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Chương 10: Các giải thuật nâng cao trình bày về Frame buffer và thiết bị hiển thị; truy cập vào frame buffer; giải thuật DD_Line; thuật toán Bresenham; biểu diễn đoạn thẳng trong frame buffer; quy tắc chọn pixel xấp xỉ tốt đoạn thẳng thực và một số nội dung khác.
Nội dung trích xuất từ tài liệu:
Bài giảng Chương 10: Các giải thuật nâng cao Chương 10: Các giải thuật nâng cao Scan conversion ª Scan conversion: quá trình biểu diễn một đối tượng hình học (đoạn thẳng, vòng tròn,...) trong bộ đệm ảnh đơn (frame buffer) của hệ thống đồ họa quét raster. ª vận hành (drive) the frame buffer thông qua các thủ tục – SetPixel( ) – GetPixel( ) Frame buffer và thiết bị hiển thị ª Mô hình chức năng của frame buffer C B y R làm tươi ảnh x Màn hình • B=1 •(value=0) => (pixel off) black •(value=1) => (pixel on) white Truy cập vào frame buffer ª Mô hình lập trình – Mô hình cho frame buffer – Các thao tác lên frame buffer. const {moät ví duï} MaxColumn = 639; {= C 1} MaxRow MaxRow = 479; {= R 1} MaxColor = 255; {= soá caùc maøu 1} type 2 col = 0..MaxColumn; 1 row = 0..MaxRow; 0 0 1 2 MaxColumn color = 0..MaxColor; procedure SetPixel(c : col, r : row, value : color); {load frame buffer} function GetPixel(c : col, r : row) : color; {read frame buffer} procedure SetPixelWord(c : col, r : row, value : word); function GetPixel(c : col, r : row) : word; Thuật toán vẽ đoạn thẳng ª Yêu cầu – Đi qua 2 điểm đầu mút của đoạn thẳng – Độ sáng đồng đều, trơn – Đường thẳng có độ dốc khác nhau phải có độ sáng như nhau – Giải thuật phải có tính lặp lại (dùng để xóa đường thẳng) – Không phụ thuộc vào các chọn điểm bắt đầu vẽ Giải thuật DD_Line ª Procedure DD_Line(row1,col1,row2,col2,color:integer); {Giaû söû ñoä doác naèm giöõa [1,1], col1 Thuật toán Bresenham ª Những hạn chế của giải thuật DD_Line – Chậm vì sử dụng hàm Round – Không chính xác khi khoảng cách giữa 2 điểm đầu mút lớn – Độ sáng không đồng đều ª Thuật toán Bresenham – Chỉ dùng số nguyên – Thuộc vào lớp giải thuật incremental (xác định tọa độ của điểm hiện hành dựa vào tọa độ của điểm trước) Biểu diễn đoạn thẳng trong frame buffer ª Cho đoạn thẳng nối hai điểm (xa , ya) và (xb , yb), – các tọa độ đều là số nguyên (tọa độ trong frame buffer) ª Biểu diễn tường minh của đường thẳng: y = m(x xa) + ya y – Độ dốc: , v ới m x y = yb ya x = xb xa ª Bài toán: Xác định các pixel biểu diễn đoạn thẳng “tốt” nhất – tùy thuộc vào cách định nghĩa sai số ª Wlog (without loss of generality), xa Sai số khi chọn pixel ª Sinh các pixel bằng phương pháp tăng dần ª Định nghĩa sai số e(Ti) = y* yi 1 e(Si) = (yi 1 1) y* Đoạn thẳng lý tưởng Si y* yi 1 Ti xi 1 xi Quy tắc chọn pixel xấp xỉ tốt đoạn thẳng thực ª Quy tắc chọn pixel Chọn Ti nếu và chỉ nếu e(Ti) e(Si) Kiểm tra tính đúng đắn của quy tắc chọn pixel ª Trường hợp đoạn thẳng lý tưởng đi qua giữa Si và Ti Đoạn thẳng lý tưởng Si y* yi 1 Ti xi 1 xi e(Ti) = y* yi 1 e(Si) = (yi 1 + 1) y* Kiểm tra tính đúng đắn của quy tắc chọn pixel (tiếp) ª Các trường hợp còn lại đoạn thẳng lý tưởng đoạn thẳng lý tưởng đi qua phía trên Si và Ti đi qua phía dưới Si và Ti Si Si Ti yi 1 yi 1 Ti xi 1 xi xi 1 xi e(Ti) >= 0 e(Ti) Tính sai số một cách hữu hiệu ª Từ ei = 2( y)(xi xa) + 2( x)(ya yi 1) x suy ra ei + 1 = 2(Dy)(xi + 1 xa) + 2(Dx)(ya yi ) Dx Từ trên, ei + 1 = ei + 2(Dy)(xi + 1 xi) 2(Dx)(yi yi 1 ) Theo quy tắc chọn pixel, – nếu ei Giải thuật của Bresenham ª Biểu diễn đoạn thẳng trong frame buffer – Giải thuật bắt đầu như thế nào? ª x0 = xa, y0 = ya ª Từ (*) có e1 = 2(Dy) Dx (dùng x1 xa = 1) procedure Bresenham(xa, xb : col; ya, yb : row; col_val : color); {veõ ñoaïn thaúng coù maøu laø col_val töø (xa, ya) ñeán (ya, yb)} {wlog, xa < xb vaø 0 < ñoä doác cuûa ñoaïn thaúng < 1} var x : col; y : row; dx, dy, e_inc, {thay ñoåi cuûa sai soá khi y taêng} e_noinc, {thay ñoåi cuûa sai soá khi y khoâng taêng} e : integer; {sai soá hieän thôøi} Giải thuật của Bresenham (tiếp) begin y := ya; dx := xb xa; dy := yb ya; e_noinc := dy + dy; {2dy} e := e_noinc dx; {e1=2dydx} e_inc := e dx; {2dxdy} for x := xa to xb do {voøng laëp chính} begin SetPixel(x, y, col_val); if e ...
Nội dung trích xuất từ tài liệu:
Bài giảng Chương 10: Các giải thuật nâng cao Chương 10: Các giải thuật nâng cao Scan conversion ª Scan conversion: quá trình biểu diễn một đối tượng hình học (đoạn thẳng, vòng tròn,...) trong bộ đệm ảnh đơn (frame buffer) của hệ thống đồ họa quét raster. ª vận hành (drive) the frame buffer thông qua các thủ tục – SetPixel( ) – GetPixel( ) Frame buffer và thiết bị hiển thị ª Mô hình chức năng của frame buffer C B y R làm tươi ảnh x Màn hình • B=1 •(value=0) => (pixel off) black •(value=1) => (pixel on) white Truy cập vào frame buffer ª Mô hình lập trình – Mô hình cho frame buffer – Các thao tác lên frame buffer. const {moät ví duï} MaxColumn = 639; {= C 1} MaxRow MaxRow = 479; {= R 1} MaxColor = 255; {= soá caùc maøu 1} type 2 col = 0..MaxColumn; 1 row = 0..MaxRow; 0 0 1 2 MaxColumn color = 0..MaxColor; procedure SetPixel(c : col, r : row, value : color); {load frame buffer} function GetPixel(c : col, r : row) : color; {read frame buffer} procedure SetPixelWord(c : col, r : row, value : word); function GetPixel(c : col, r : row) : word; Thuật toán vẽ đoạn thẳng ª Yêu cầu – Đi qua 2 điểm đầu mút của đoạn thẳng – Độ sáng đồng đều, trơn – Đường thẳng có độ dốc khác nhau phải có độ sáng như nhau – Giải thuật phải có tính lặp lại (dùng để xóa đường thẳng) – Không phụ thuộc vào các chọn điểm bắt đầu vẽ Giải thuật DD_Line ª Procedure DD_Line(row1,col1,row2,col2,color:integer); {Giaû söû ñoä doác naèm giöõa [1,1], col1 Thuật toán Bresenham ª Những hạn chế của giải thuật DD_Line – Chậm vì sử dụng hàm Round – Không chính xác khi khoảng cách giữa 2 điểm đầu mút lớn – Độ sáng không đồng đều ª Thuật toán Bresenham – Chỉ dùng số nguyên – Thuộc vào lớp giải thuật incremental (xác định tọa độ của điểm hiện hành dựa vào tọa độ của điểm trước) Biểu diễn đoạn thẳng trong frame buffer ª Cho đoạn thẳng nối hai điểm (xa , ya) và (xb , yb), – các tọa độ đều là số nguyên (tọa độ trong frame buffer) ª Biểu diễn tường minh của đường thẳng: y = m(x xa) + ya y – Độ dốc: , v ới m x y = yb ya x = xb xa ª Bài toán: Xác định các pixel biểu diễn đoạn thẳng “tốt” nhất – tùy thuộc vào cách định nghĩa sai số ª Wlog (without loss of generality), xa Sai số khi chọn pixel ª Sinh các pixel bằng phương pháp tăng dần ª Định nghĩa sai số e(Ti) = y* yi 1 e(Si) = (yi 1 1) y* Đoạn thẳng lý tưởng Si y* yi 1 Ti xi 1 xi Quy tắc chọn pixel xấp xỉ tốt đoạn thẳng thực ª Quy tắc chọn pixel Chọn Ti nếu và chỉ nếu e(Ti) e(Si) Kiểm tra tính đúng đắn của quy tắc chọn pixel ª Trường hợp đoạn thẳng lý tưởng đi qua giữa Si và Ti Đoạn thẳng lý tưởng Si y* yi 1 Ti xi 1 xi e(Ti) = y* yi 1 e(Si) = (yi 1 + 1) y* Kiểm tra tính đúng đắn của quy tắc chọn pixel (tiếp) ª Các trường hợp còn lại đoạn thẳng lý tưởng đoạn thẳng lý tưởng đi qua phía trên Si và Ti đi qua phía dưới Si và Ti Si Si Ti yi 1 yi 1 Ti xi 1 xi xi 1 xi e(Ti) >= 0 e(Ti) Tính sai số một cách hữu hiệu ª Từ ei = 2( y)(xi xa) + 2( x)(ya yi 1) x suy ra ei + 1 = 2(Dy)(xi + 1 xa) + 2(Dx)(ya yi ) Dx Từ trên, ei + 1 = ei + 2(Dy)(xi + 1 xi) 2(Dx)(yi yi 1 ) Theo quy tắc chọn pixel, – nếu ei Giải thuật của Bresenham ª Biểu diễn đoạn thẳng trong frame buffer – Giải thuật bắt đầu như thế nào? ª x0 = xa, y0 = ya ª Từ (*) có e1 = 2(Dy) Dx (dùng x1 xa = 1) procedure Bresenham(xa, xb : col; ya, yb : row; col_val : color); {veõ ñoaïn thaúng coù maøu laø col_val töø (xa, ya) ñeán (ya, yb)} {wlog, xa < xb vaø 0 < ñoä doác cuûa ñoaïn thaúng < 1} var x : col; y : row; dx, dy, e_inc, {thay ñoåi cuûa sai soá khi y taêng} e_noinc, {thay ñoåi cuûa sai soá khi y khoâng taêng} e : integer; {sai soá hieän thôøi} Giải thuật của Bresenham (tiếp) begin y := ya; dx := xb xa; dy := yb ya; e_noinc := dy + dy; {2dy} e := e_noinc dx; {e1=2dydx} e_inc := e dx; {2dxdy} for x := xa to xb do {voøng laëp chính} begin SetPixel(x, y, col_val); if e ...
Tìm kiếm theo từ khóa liên quan:
Giải thuật nâng cao Bài giảng Giải thuật nâng cao Frame buffer Thuật toán Bresenham Biểu diễn đoạn thẳng trong frame buffer Quy tắc chọn pixelGợi ý tài liệu liên quan:
-
Bài giảng Đồ họa máy tính: Chương 2 - ThS. Trần Thị Minh Hoàn
39 trang 35 0 0 -
Bài giảng Đồ họa máy tính: Thuật toán Bresenham - Vẽ đường thẳng
15 trang 34 0 0 -
Báo cáo thực hành Đồ họa máy tính
19 trang 23 0 0 -
Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Phần 1 - PGS.TS. Trần Cao Đệ
79 trang 23 0 0 -
Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 3 - PGS.TS. Trần Cao Đệ
54 trang 21 0 0 -
Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 6 - PGS.TS. Trần Cao Đệ
25 trang 21 0 0 -
11 trang 19 0 0
-
Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 5 - PGS.TS. Trần Cao Đệ
20 trang 18 0 0 -
Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Chương 4 - PGS.TS. Trần Cao Đệ
52 trang 17 0 0 -
Bài giảng Đồ họa máy tính: Thuật toán vẽ đường thẳng Bresenham
15 trang 15 0 0