Giải thuật Bresenham theo nguyên lý tím ra các điểm gần với đường thẳng dựa trên đô phân giải hữu hạn. Giải thuật này loại bỏ được các phép toán chia và phép toán làm tròn như ta đã thấy trong thuật toán DDA
Hình 2.3 Dạng đƣờng thẳng nếu 0<m<=1
Gọi (xi+1, yi +1) là điểm thuộc đoạn thẳng (xem hình 2.3). Ta có y = m (xi +1) + b
Đặt d1 = yi +1 - yi và d2 = yi +1 - yi +1
Việc chọn điểm (xi +1, yi +1) là P1 hay P2 phụ thuộc vào việc so sánh
d1 và d2 Nếu d1- d2 <0 : chọn điểm P1, tức là yi +1= yi Nếu d1- d2 ≥0 : chọn điểm P2, tức là yi +1= yi +1 Ta có : d1 - d2 = 2yi+1 - 2yi - 1 = 2m(xi+1) + 2b - 2yi - 1 (2-4) Pi = cx (d1 - d2) = Δx[2m(xi+1) + 2b - 2yi - 1] = Δx[2 x y ( xi + 1 ) + 2b – 2 yi - 1]
= 2Δy(xi+1) - 2Δx.yi + Δx(2b - 1) = 2Δy.xi - 2Δx.yi + 2Δy + Δx(2b - 1) Vậy C = 2Δy + Δx(2b - 1) = Const ⇒ Pi = 2Δy.xi - 2Δx.yi + C (2-5)
Nhận xét rằng nếu tại bước thứ i ta xác định được dấu của Pi thì xem như ta xác định được điểm cần chọn ở bước (i+1). Ta có :
Pi +1 - Pi = (2Δy.xi+1 - 2Δx.yi+1 + C) - (2Δy.xi - 2Δx.yi + C ) ⇔ Pi +1 = Pi + 2Δy - 2Δx ( yi+1 - yi )
Nếu Pi < 0 : chọn điểm P1, tức là yi +1= yi và Pi +1= Pi + 2Δy Nếu Pi ≥ 0 : chọn điểm P2, tức là yi +1= yi +1
và Pi +1= Pi + 2Δy - 2Δx (2-6)
Giá trị P0 được tính từ điểm vẽ đầu tiên (xo, yo) theo công thức: Po = 2Δy.xo - 2Δx.yo + C
Do (xo ,yo ) là điểm nguyên thuộc về đoạn thẳng nên ta có: yo mx o +b= x b x y 0
Thay yo vào phương trình trên ta được: Po = 2Δy - Δx
Nhận xét:
Thuật toán Bresenham chỉ thao tác trên số nguyên và chỉ tính toán trên phép cộng và phép nhân 2. Điều này là một cải tiến làm tăng tốc độ đáng kể so với thuật toán DDA. Ý tưởng chính của thuật toán này là ở chổ xét dấu Pi để quyết định điểm kế tiếp, và sử dụng còng thức truy hồi Pi +1 Pi để tính Pi bằng các phép toán đơn giản trên số nguyên. Tuy nhiên, việc xây dựng trường hợp tổng quát cho thuật toán Bresenham có phức tạp hơn thuật toán DDA.
Tóm lại: Để vẽ đường thẳng theo thuật toán Bresenham cho trường hợp hệ số góc 0<m<1 như sau:
Nhập A(x1,y1), B(x2, y2)
Tính Δx=x2 - x1 , Δ y =y2 - y1, P=2Δy – Δx , C1=2Δy, C2=2(Δy – Δx)
Điểm đầu tiên: x=x1, y=y1;
Điểm tiếp theo:
x=x1+1, y=y1, Pi=Pi+C1. Nếu Pi<0 x=x1+1, y=y1+1, Pi=Pi+C2. Nếu Pi>0
Quá trình tiếp tục cho đến khi x>=x2
Ví dụ:
Hãy tìm các hệ số p và tọa độ các điểm sẽ nảy sinh của đoạn thẳng được vẽ theo giải thuật Bresenham, nếu biết đoạn thẳng đi qua hai điểm A(2,4) và B(5,8) với 0<m<=1
Theo thuật toán Bresenham Dx=x2-x1=3, Dy=y2-y1=4 P=2dy-dx=8-3=5 C1=2dy=8 C2=2(dy-dx)=2 Điểm A: x1=2, y1=4 *P = 5>0 P = P + C2 = 5 + 2 = 7 Điểm A1: x2=3, y2=5
*P=7>0 P= P + C2 = 7 + 2= 9 Điểm A2: x3=4, y3=6
*P=9>0 P=P + C2 = 9 + 2=11 Điểm A3: x4=5, y4=7
Ví X4=Xb=5 nên quá trính sinh điểm dừng.
Vậy có 2 điểm phát sinh khi vẽ đường thẳng theo thuật toán Bresenham