Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
301,5 KB
Nội dung
Thuật toán vẽ đường thẳng Bresenham Mối tương quan X & Y độ lớn hệ số góc nhỏ Dy Dx x tăng y giữ nguyên hay tăng Điều bảo đảm cho đường thẳng liên tục Nếu độ lớn hệ số góc lớn 1, đổi vai trò x &y x gọi giá trị độc lập y giá trị phụ thuộc Thuật toán Bresenham Giới thiệu: • Giả sử đường cong xấp xỉ thành điểm (xi,yi) Các điểm có tọa độ nguyên hiển thị hình • Bài toán đặt biết tọa độ (xi,yi) bước thứ i, điểm bước i+1 (xi+1,yi+1) xác định • Trong trường hợp hệ số góc 00,Dx>Dy Dx0,Dy|Dy| Kết hợp vùng • • x tăng Vùng y tăng vùng 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 • • Vùng x tăng 1, vùng x giảm 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, • • x tăng Dx > 0, giảm Dx < y tăng Dy > 0, giảm Dy < 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 Dy > 0, giảm Dy < x tăng Dx > 0, giảm Dx < 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 int dx dy = = (Dx (Dy < < 0) 0) ? ? -1 -1 : : 1; 1; Dx Dy = = abs(Dx); abs(Dy); putpixel(x, y, color); if (Dx > Dy) { int p = * Dy – Dx; int const1 = * Dy, const2 = * (Dy-Dx); while (x (x != x2) x2) { if (p < 0) { p += } else { p += y += } x += dx; putpixel(x, y, } } else {// đổi vai trò x y … } const1; const2; dy; color); } 14 Bài tập Cài đặt thuật toán Bresenham cho: • Đường tròn tâm (xc,yc) bán kính R: (x-xc)2 + (y-yc)2 = R2 • Đường elip tâm (xc,yc) bán kính dài a, rộng b: (x-xc)2 / a2 + (y-yc)2 / b2 = 15 [...]... != x2) x2) { if (p < 0) { p += } else { p += y += } x += dx; putpixel(x, y, } } else {// đổi vai trò giữa x và y … } const1; const2; dy; color); } 14 Bài tập Cài đặt thuật toán Bresenham cho: • Đường tròn tâm (xc,yc) bán kính R: (x-xc)2 + (y-yc)2 = R2 • Đường elip tâm (xc,yc) bán kính dài là a, rộng là b: (x-xc)2 / a2 + (y-yc)2 / b2 = 1 15 ... 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, ... tăng Điều bảo đảm cho đường thẳng liên tục Nếu độ lớn hệ số góc lớn 1, đổi vai trò x &y x gọi giá trị độc lập y giá trị phụ thuộc Thuật toán Bresenham Giới thiệu: • Giả sử đường cong xấp xỉ thành... trò x y … } const1; const2; dy; color); } 14 Bài tập Cài đặt thuật toán Bresenham cho: • Đường tròn tâm (xc,yc) bán kính R: (x-xc)2 + (y-yc)2 = R2 • Đường elip tâm (xc,yc) bán kính dài a, rộng... hình • Bài toán đặt biết tọa độ (xi,yi) bước thứ i, điểm bước i+1 (xi+1,yi+1) xác định • Trong trường hợp hệ số góc 0