Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (295.51 KB, 7 trang )
Đề tài: Vẽ Đường Thẳng Dùng Thuật Toán
Bresenham
HÀ NỘI, 12/2017
1. Nguyên Lý Thuật Toán
Cho 2 điểm đầu mút M1 (x1, y1), M2(x2, y2) và màu vẽ C.
Trong bài nguyên lý chung vẽ đoạn thẳng chúng ta đã xây dựng phương trình đường
thẳng có dạng:
Để đơn giản hóa giải thuật ta xét đường thẳng với
Tại mỗi bước ta cho x tăng lên 1 đơn vị tức là
. Bước tiếp theo là ta
tính
nhưng ta sẽ không làm giống thuật toán DDA vì nó phải xử lỹ dữ liệu trên số
thực và làm tròn số dẫn tới mất thời gian. Ta sẽ tìm các tính theo các số nguyên.
Giả sử tại bước thứ k ta có được hình vẽ như sau:
Gọi y là tung độ chính xác của y_{k + 1}. Ta sẽ lấy giá trị y là giá trị gần nhất với y_{k}
+ 1 hay y_{k}. Để làm việc này ta xét d1 và d2.
d1 = y - y_{k} = m(x_{i} + 1) + b - y_{k} \\ d2 = y_{k} + 1 - y = y_{k} + 1 - m(x_{i}
+1) - b\\ => d1 - d2 = 2m(x_{i} +1) - 2y_{k} + 2b - 1
Nếu d1 > d2 khi đó y_{k + 1} = y_{k} + 1
Nếu d1 < d2 khi đó y_{k + 1} = y_{k}
Do đó nếu ta xác định được dấu của d1 – d2 thì ta sẽ biết được giá trị của y_{k+1} . Ta
xét hằng số P_{k} = (x1-x2)(d1-d2) (Ta nhân với (x1-x2) để triệt tiêu được mẫu khi thay
m vào khi tính toán).
Do Dx > 0 nên P_{k} chỉ phụ thuộc vào d1 -d2. Ta có:
m = \frac{y2-y1}{x2-x1} \\ \Rightarrow P_{k} = (x2-x1)(d1 - d2) = (x2-x1).\frac{2(y2y1)(x_{k}+1) +(x2-x1)(-2y_{k} + 2b - 1)}{x2-x1} \\ \\ \indent \indent = 2(y2-y1)x_{k} 2(x2-x1)y_{k} + 2(y2-y1) + (x2-x1)(2b-1) \\ \indent \indent = 2x_{k}Dy - 2y_{k}.Dx +
c \\ \\ \Rightarrow P_{k+1} = 2(x_{k}+1)Dy - 2y_{k+1}Dx + c, voi : \left (c= 2Dy +