Thuật toán vẽ đường thẳng Bresenham
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) {
if (p < 0) {
p += const1;
} else {
p += const2;
y += dy;
}
x += dx;
putpixel(x, y, color);
}
} else {// đổi vai trò giữa x và y
}
}
14 trang |
Chia sẻ: maiphuongtl | Lượt xem: 2632 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Thuật toán vẽ đường thẳng Bresenham, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
* Thuật toán vẽ đường thẳng Bresenham * Mối tương quan giữa X & Ykhi độ lớn hệ số góc nhỏ hơn 1 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 Dx Dy * 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 0Dy>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 0. Chú ý trường hợp pi = 0. Tính p1 * Mở rộng 1 4 3 2 8 7 6 5 Dx>0,Dy>0,Dx>Dy Dx>0,Dy|Dy| Dx0,|Dx|>Dy Dx|Dy| * 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, giảm 1 khi Dx 0, giảm khi Dy 0, giảm 1 khi Dy 0, giảm khi Dx Dy) { int p = 2 * Dy – Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } } else {// đổi vai trò giữa x và y … } } * 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
Các file đính kèm theo tài liệu này:
- bresenhamlinedrawing_0207.ppt