Bài giảng Đồ họa máy tính: Thuật toán vẽ đường thẳng Bresenham
Số trang: 15
Loại file: ppt
Dung lượng: 301.50 KB
Lượt xem: 15
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Đồ họa máy tính: Thuật toán vẽ đường thẳng Bresenham có nội dung giới thiệu về thuật toán Bresenham, cài đặt thuật toán cho đường tròn tâm và đường elip tâm, chương trình thuật toán và bài tập. Tham khảo nội dung bài giảng để hiểu rõ hơn về các nội dung trên.
Nội dung trích xuất từ tài liệu:
Bài giảng Đồ họa máy tính: Thuật toán vẽ đường thẳng Bresenham Thuật toán vẽ đường thẳng Bresenham 1 Mối tương quan giữa X & Y khi độ lớn hệ số góc nhỏ hơn 1 Dy Dx x tăng 1 và y giữ nguyên hay tăng 1 Điều này bảo đảm cho đường thẳng liên tục Nếu độ lớn của hệ số góc lớn hơn 1, chúng ta đổi vai trò của x &y x được gọi là giá trị độc lập và y là giá trị phụ thuộc 2 Thuật toán Bresenham Giới thiệu: • Giả sử đường cong được xấp xỉ thành các điểm lần lượt là (xi,yi). Các điểm này có tọa độ nguyên và được hiển thị trên màn hình. • Bài toán đặt ra là nếu biết được tọa độ (xi,yi) của bước thứ i, thì điểm ở bước i+1 là (xi+1,yi+1) sẽ được xác định như thế nào. • Trong trường hợp hệ số góc 0 Thuật toán • Phương trình đường thẳng qua 2 điểm (x1, y1) và (x2, y2) là y=mx+b với m=Dy/Dx và b=y1-mx1. • Đặt d1=y-yi và d2=(yi+1)-y, do đó việc chọn tọa độ của yi+1 phụ thuộc vào d1 và d2 ( hay dấu của d1 - d2): – Nếu d1-d2 Thuật toán (cont.) • d1 - d2 = (2y – 2yi – 1) là một số thực do chứa m • Xét pi = Dx (d1 - d2) = Dx (2y - 2yi - 1) = 2Dy xi - 2Dx yi + C – C = 2Dy + (2b - 1)Dx • Do dấu của pi và (d1-d2) giống nhau nên khi xét dấu của pi thì ta xác định được yi+1 • Mặc khác, pi+1 – pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C) = 2Dy – 2Dx(yi+1 – yi) • Từ đây, ta suy ra cách tính pi+1 theo pi: – Nếu pi Begin p = 2Dy - Dx; const1=2Dy; const2=2(Dy-Dx); x = x1; y = y1; putpixel(x,y,color); x Chương trình (Dx>Dy>0) void BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); putpixel(x, y, color); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x++; putpixel(x, y, color); } } 7 Tổng kết • Xác định d1 và d2 sao cho d1 là độ lệch từ y đến điểm hiện hành yi • Xác định pi sao cho pi cùng dấu với (d1 – d2) và mang giá trị nguyên • Tính pi+1 theo pi theo 2 trường hợp pi < 0 và pi > 0. Chú ý trường hợp pi = 0. • Tính p1 yi+1 P (xi+1,y=f(xi+1)) d2 d1 yi S xi xi+1=xi+1 8 Mở rộng 3 2 4 1 Dx0,|Dx|>Dy Dx>0,Dy>0,Dx>Dy 8 5 Dx>0,Dy|Dy| Dx Kết hợp vùng 1 và 8 • x tăng 1 • Vùng 1 y tăng còn vùng 2 y giảm ... int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x++; putpixel(x, y, color); } ... 10 Kết hợp vùng 1 và 4 • Vùng 1 x tăng 1, vùng 4 x giảm 1 • y tăng ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x += dx; putpixel(x, y, color); } ... 11 Kết hợp vùng 1, 4, 5, 8 • x tăng 1 khi Dx > 0, giảm 1 khi Dx < 0 • y tăng khi Dy > 0, giảm khi Dy < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } ... 12 Kết hợp vùng 2, 3, 6, 7: x tính theo y • y tăng 1 khi Dy > 0, giảm 1 khi Dy < 0 • x tăng khi Dx > 0, giảm khi Dx < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (y != y2) { if (p < 0) { p += const1; } else { p += const2; x += dx; } y += dy; putpixel(x, y, color); } ... 13 Chương trình hoàn chỉnh BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); putpixel(x, y, color); if (Dx > Dy) { int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); while (x != x2) { (x x2) if (p < 0) { p += const1; ...
Nội dung trích xuất từ tài liệu:
Bài giảng Đồ họa máy tính: Thuật toán vẽ đường thẳng Bresenham Thuật toán vẽ đường thẳng Bresenham 1 Mối tương quan giữa X & Y khi độ lớn hệ số góc nhỏ hơn 1 Dy Dx x tăng 1 và y giữ nguyên hay tăng 1 Điều này bảo đảm cho đường thẳng liên tục Nếu độ lớn của hệ số góc lớn hơn 1, chúng ta đổi vai trò của x &y x được gọi là giá trị độc lập và y là giá trị phụ thuộc 2 Thuật toán Bresenham Giới thiệu: • Giả sử đường cong được xấp xỉ thành các điểm lần lượt là (xi,yi). Các điểm này có tọa độ nguyên và được hiển thị trên màn hình. • Bài toán đặt ra là nếu biết được tọa độ (xi,yi) của bước thứ i, thì điểm ở bước i+1 là (xi+1,yi+1) sẽ được xác định như thế nào. • Trong trường hợp hệ số góc 0 Thuật toán • Phương trình đường thẳng qua 2 điểm (x1, y1) và (x2, y2) là y=mx+b với m=Dy/Dx và b=y1-mx1. • Đặt d1=y-yi và d2=(yi+1)-y, do đó việc chọn tọa độ của yi+1 phụ thuộc vào d1 và d2 ( hay dấu của d1 - d2): – Nếu d1-d2 Thuật toán (cont.) • d1 - d2 = (2y – 2yi – 1) là một số thực do chứa m • Xét pi = Dx (d1 - d2) = Dx (2y - 2yi - 1) = 2Dy xi - 2Dx yi + C – C = 2Dy + (2b - 1)Dx • Do dấu của pi và (d1-d2) giống nhau nên khi xét dấu của pi thì ta xác định được yi+1 • Mặc khác, pi+1 – pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C) = 2Dy – 2Dx(yi+1 – yi) • Từ đây, ta suy ra cách tính pi+1 theo pi: – Nếu pi Begin p = 2Dy - Dx; const1=2Dy; const2=2(Dy-Dx); x = x1; y = y1; putpixel(x,y,color); x Chương trình (Dx>Dy>0) void BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); putpixel(x, y, color); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x++; putpixel(x, y, color); } } 7 Tổng kết • Xác định d1 và d2 sao cho d1 là độ lệch từ y đến điểm hiện hành yi • Xác định pi sao cho pi cùng dấu với (d1 – d2) và mang giá trị nguyên • Tính pi+1 theo pi theo 2 trường hợp pi < 0 và pi > 0. Chú ý trường hợp pi = 0. • Tính p1 yi+1 P (xi+1,y=f(xi+1)) d2 d1 yi S xi xi+1=xi+1 8 Mở rộng 3 2 4 1 Dx0,|Dx|>Dy Dx>0,Dy>0,Dx>Dy 8 5 Dx>0,Dy|Dy| Dx Kết hợp vùng 1 và 8 • x tăng 1 • Vùng 1 y tăng còn vùng 2 y giảm ... int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x++; putpixel(x, y, color); } ... 10 Kết hợp vùng 1 và 4 • Vùng 1 x tăng 1, vùng 4 x giảm 1 • y tăng ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x += dx; putpixel(x, y, color); } ... 11 Kết hợp vùng 1, 4, 5, 8 • x tăng 1 khi Dx > 0, giảm 1 khi Dx < 0 • y tăng khi Dy > 0, giảm khi Dy < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } ... 12 Kết hợp vùng 2, 3, 6, 7: x tính theo y • y tăng 1 khi Dy > 0, giảm 1 khi Dy < 0 • x tăng khi Dx > 0, giảm khi Dx < 0 ... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (y != y2) { if (p < 0) { p += const1; } else { p += const2; x += dx; } y += dy; putpixel(x, y, color); } ... 13 Chương trình hoàn chỉnh BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1, Dy = y2 – y1; int x = x1, y = y1; int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); putpixel(x, y, color); if (Dx > Dy) { int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); while (x != x2) { (x x2) if (p < 0) { p += const1; ...
Tìm kiếm theo từ khóa liên quan:
Đồ họa máy tính Thuật toán Bresenham Vẽ đường thẳng Cài đặt thuật toán Chương trình thuật toán Kỹ thuật đồ họaGợi ý tài liệu liên quan:
-
vray for sketchup vietnamese PHẦN 3
10 trang 211 0 0 -
Giáo trình Autocad - Nghề: Quản trị mạng máy tính - Trình độ: Cao đẳng nghề (Phần 2)
52 trang 208 0 0 -
Đề cương chi tiết môn học Kỹ thuật đồ họa và xử lý ảnh
5 trang 175 1 0 -
Luận văn tốt nghiệp: Tìm hiểu về SIMULINK trong MATLAB
50 trang 155 0 0 -
Giáo trình CorelDRAW dành cho người mới học
48 trang 141 0 0 -
Giáo trình CorelDraw 10 - Tham khảo toàn diện: Phần 2
528 trang 132 0 0 -
Bài giảng Đồ họa máy tính: Khử mặt khuất - Ngô Quốc Việt
28 trang 127 0 0 -
Giáo trình Kỹ thuật đồ họa cho ngành Đa phương tiện: Phần 1
106 trang 86 1 0 -
Giáo trình môn học Lý thuyết thông tin
136 trang 71 0 0 -
Kỹ thuật sắp xếp ảnh minh họa bằng phương pháp contact sheet theo thứ tự dòng và cột p5
18 trang 57 0 0