ĐỒ HỌA RASTER
CÁC THUẬT TOÁN
VẼ ĐƯỜNG THẲNG
Giảng viên : Bùi Tiến Lên
Bài toán vẽ đường thẳng
Input
(X1, Y1) (X2, Y2)
Output
{(x1, y1) (x2, y2) … (xn, yn)} là những điểm sáng “nằm trên” đường thẳng
(X 2 , Y 2 )
(X 1 , Y 1 )
Trang 2
Bài toán vẽ đường thẳng
Trang 3
Một số công thức cơ bản của đường thẳng
(X2, Y2)
y = mx + b
y b
x= −
m m
Y2 − Y1 ∆y
m=
=
X2 − X1 ∆x
b = Y1 − mX1
(X1, Y1)
Trang 4
Phân loại đường thẳng
Tăng chậm
Tăng nhanh
Giảm chậm
Giảm nhanh
Trang 5
Giải quyết
Thuật toán DDA
Thuật toán Bresenham
Trang 6
Thuật toán DDA
Thuật toán DDA
Trang 8
Trường hợp 1
Đoạn thẳng tăng chậm và điểm đầu ở bên trái.
Thuật toán
Bước 1 Xác định điểm đầu tiên
x1 = X1
1
y1 = Y1
Bước 2 Xác định những điểm tiếp theo
Lặp xi < X2
xi+1 = xi + 1
2
3 …
n
y = mxi+1 + b
yi+1 = Round(y)
Trang 9
Trường hợp 1
Cải tiến tính y
Xét hai điểm sáng liên tiếp nhau
i
i+1
Công thức liên hệ
(xi, ycũ)
(xi+1, ymới)
y đầu là Y1
ymới = ycũ + m
Trang 10
Trường hợp 2
Đoạn thẳng tăng nhanh và điểm đầu ở bên dưới.
Thuật toán
Bước 1 Xác định điểm đầu tiên
x1 = X1
y1 = Y1
Bước 2 Xác định những điểm tiếp theo
Lặp yi < Y2
yi+1 = yi + 1
x = yi+1/m – b/m
xi+1 = Round(x)
Trang 11
Trường hợp 2
Cải tiến tính x
Xét hai điểm sáng liên tiếp nhau
i
i+1
Công thức liên hệ
(xc, yi)
(xmới, yi+1)
X2 − X1
k=
Y2 − Y1
x đầu là X1
xmới = xcũ + k
Trang 12
Thuật toán Bresenham
Trường hợp 1
Dự đoán điểm sáng thứ i+1
B
i
A
Trang 14
Trường hợp 1
Xây dựng biến pi
y = m(xi+1) + b
yi+1
B
d1 = y - yi
d2
d2 = yi + 1 - y
y
pi = ∆x(d1 - d2)
C
d1
yi
i
A
xi
xi+1
Trang 15
Trường hợp 1
Cách tính pi
pi = 2∆yxi – 2∆xyi + 2∆xY1 – 2∆yX1 + 2∆y – ∆x
Trang 16
Trường hợp 1
Đoạn thẳng tăng chậm và điểm đầu ở bên trái.
Thuật toán
Bước 1 Xác định điểm đầu tiên
x1 = X1
y1 = Y1
Bước 2 Xác định những điểm tiếp theo
Lặp xi < X2
pi = …
pi < 0
xi+1 = xi + 1
yi+1 = yi
pi >= 0
xi+1 = xi + 1
yi+1 = yi + 1
Trang 17
Trường hợp 1
Cách tính pi cải tiến
p1 = 2∆y - ∆x
pi < 0 :
pi+1 = pi + 2∆y
pi >= 0 :
pi+1 = pi + 2∆y - 2∆x
Trang 18
Trường hợp 2
Dự đoán điểm sáng thứ i+1
A
B
i
Trang 19
Trường hợp 2
Xaây döïng bieán pi
yi + 1 b
x=
−
m
m
d1 = xi − x
C
yi+1 A
B
d2
d1
d2 = x i + 1 − x
pi = ∆y( d1 − d2 )
yi
i
xi
x
xi+1
Trang 20
Trường hợp 2
Cách tính pi
p1 = 2∆x - ∆y
pi < 0 :
pi+1 = pi + 2∆x
pi >= 0 :
pi+1 = pi + 2∆x - 2∆y
Trang 21
Trường hợp 2
Thuật toán
Bước 1 Xác định điểm đầu tiên
x1 = X1
y1 = Y1
Bước 2 Xác định những điểm tiếp theo
Lặp xi < X2
pi < 0
xi+1 = xi
yi+1 = yi + 1
pi >= 0
xi+1 = xi + 1
yi+1 = yi + 1
Trang 22