You are on page 1of 21

ĐỒ HỌA RASTER

CÁC THUẬT TOÁN


VẼ ĐƯỜNG THẲNG
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

(X2, Y2)

(X1, Y1)

Trang 2
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= =
X 2 − X1 x
b = Y1 − mX 1
(X1, Y1)

Trang 3
Phân loại đoạn thẳng
Tăng chậm Tăng nhanh

Giảm chậm Giảm nhanh

Trang 4
Các phương pháp vẽ đường thẳng
Thuật toán DDA
Thuật toán Bresenham

Trang 5
Thuật toán DDA
Trường hợp 1
Đoạn thẳng tăng chậm và điểm đầu nằm bên trái
Thuật toán
Bước 1 Xác định điểm đầu tiên 1
x1 = X1
y1 = Y1
Bước 2 Xác định những điểm tiếp theo 2 3 … n
Lặp xi < X2
xi+1 = xi + 1
y = mxi+1 + b
yi+1 = Round(y)

Trang 7
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 (xi, ycũ)

i+1 (xi+1, ymới)

Công thức tính


yđầu là Y1
ymới = ycũ + m

Trang 8
Trường hợp 2
Đoạn thẳng tăng nhanh và điểm đầu nằm 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 9
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 (xcũ, yi)

i+1 (xmới, yi+1)


Công thức tính
X2 − X1
k=
Y2 − Y1
xđầu là X1
xmới = xcũ + k

Trang 10
Thuật toán Bresenham
Trường hợp 1
Dự đoán điểm sáng thứ i+1

i A

Trang 12
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
C
pi = x(d1 - d2) d1

yi i A

xi xi+1

Trang 13
Trường hợp 1
Khoảng cách d1, d2 hay khoảng cách h1, h2 ?

B
h2
d2

d1
h1
A

xi+1
Trang 14
Trường hợp 1
Cách tính pi

pi = 2yxi – 2xyi + 2xY1 – 2yX1 + 2y – x

Trang 15
Trường hợp 1
Đoạn thẳng tăng chậm và điểm đầu nằm 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 16
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 17
Trường hợp 2
Dự đoán điểm sáng thứ i+1

A B

Trang 18
Trường hợp 2

Xaây döïng bieán pi C


yi+1 A B
yi + 1 b
x= −
m m
d1 = xi − x d1 d2
d2 = xi + 1− x
pi = y(d1 − d2 )
yi i

xi x xi+1

Trang 19
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 20
Trường hợp 2
Đoạn thẳng tăng nhanh và điểm đầu nằm 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
pi < 0
xi+1 = xi
yi+1 = yi + 1
pi >= 0
xi+1 = xi + 1
yi+1 = yi + 1
Trang 21

You might also like