You are on page 1of 12

DDA Line Algorithm

TH1: Nếu |?1| < 1, y= f(x)


Từ phương trình đường thẳng đi qua 2 điểm A và B
𝑦 = 𝑚𝑥 + b

dy ( yB− yA)
Với m= dx = (xB−xA) = ?1 Nếu |?1| < 1, y=f(x)

+ Nếu xA < xB, yA < yB


Nên: xi+1 = xi+1 và y = round(f(x))
+ Nếu xA > xB, yA > yB
Nên: xi+1 = xi-1 và y = round(f(x))
+ Nếu xA > xB, yA < yB
Nên: xi+1 = xi-1 và y = round(f(x))
+ Nếu xA < xB, yA > yB
Nên: xi+1 = xi+1 và y = round(f(x))
Ta có : y0= mx0 +b
Suy ra: yi= mxi + b
Và yi+1= mxi+1+ b= Chú ý : xi+1= xi- 1
Vậy yi+1= round(yi +- m)
TH2: Nếu |?1| > 1, x= f(y)
Từ phương trình đường thẳng đi qua 2 điểm A và B
𝑦 = 𝑚𝑥 + b

dy ( yB− yA)
Với m= dx = (xB−xA) = ?1 Nếu |?1| > 1, x=f(y)

+ Nếu xA < xB, yA < yB


Nên: yi+1 = yi+1 và y = round(f(y))
+ Nếu xA > xB, yA > yB
Nên: yi+1 = yi-1 và y = round(f(y))
+ Nếu xA > xB, yA < yB
Nên: yi+1 = yi+1 và y = round(f(y))
+ Nếu xA < xB, yA >yB
Nên: yi+1 = yi-1 và y = round(f(y))
y 0−b
Ta có : x 0=
m
y i−b
Suy ra: xi=
m
y i+1−b
Và xi+1= = Chú ý : yi+1= yi- 1
m
1
Vậy xi+1= round(xi +- m )
Bresenham Line Algorithm
TH1: |m| < 1
Từ phương trình đường thẳng đi qua 2 điểm A và B
y= mx +b
dy ( yB− yA)
Với m= dx = (xB−xA) = ?1 Nếu |?1| < 1, y=f(x)

Vẽ hình
Đặt
+ Nếu mũi tên từ trái sang phải đi lên: d1= yi + 1- y và d2= y - yi
+ Nếu mũi tên từ phải sang trái đi xuống: d1= yi – y và d2= y - yi -1
+ Nếu mũi tên từ phải sang trái đi lên: d1= yi + 1- y và d2= y - yi
+ Nếu mũi tên từ trái sang phải đi xuống d1= yi – y và d2= y - yi +1
Pt đường thẳng đi qua Q: dx(d1-d2) = ?2
+ Nếu mũi tên từ trái sang phải đi lên: ?2 = dx(2yi-2y+1)
+ Nếu mũi tên từ phải sang trái đi xuống: ?2 = dx(2yi-2y+1)
+ Nếu mũi tên từ phải sang trái đi lên: ?2 = dx(2yi-2y+1)
+ Nếu mũi tên từ trái sang phải đi xuống : ?2 = dx(2yi-2y-1)
Xét Qi thuộc đường thẳng tại thời điểm i:
Qi= dx[2yi- 2(?3) +-1]
+ Nếu mũi tên phải sang trái: ?3 = m(xi-1) +b

+ Nếu mũi tên trái sang phải: ?3 = m(xi+1) +b

=
= Chú ý : rút gọn dx
+ Nếu ?2 = dx(2yi-2y+1) và ?3 = m(xi+1) +b thì áp dụng

+ Nếu ?2 = dx(2yi-2y+1) và ?3 = m(xi-1) thì áp dụng

+ Nếu 2 = dx(2yi-2y-1) và ?3 = m(xi+1) thì áp dụng

Suy ra Qi =
Xét Qi+1 là điểm kế tiếp sau Qi
Qi+1=
 Chú ý : xi+1 = xi +1

+ Nếu
Qi+1 - Qi = ?4
+ Nếu mũi tên trái sang phải thì ?4 = 2dx(yi+1 - yi) - 2dy
+ Nếu mũi tên phải sang trái thì ?4 = 2dx(yi+1 - yi) + 2dy
Vì dy = XB … XA
+ Nếu XB > XA và mũi tên đi lên
Nên Qi < 0: yi+1 = yi +1 => Qi+1 = Qi + 2dx -2dy
Và Qi >= 0: yi+1 = yi => Qi+1 = Qi -2dy
+ Nếu XB > XA và mũi tên đi xuống
Nên Qi <=0: yi+1 = yi => Qi+1 = Qi - 2dy
Và Qi > 0: yi+1 = yi -1=> Qi+1 = Qi - 2dx -2dy
+ Nếu XB < XA và mũi tên lên
Nên Qi >= 0: yi+1 = yi +1=> Qi+1 = Qi + 2dx +2dy
Và Qi < 0: yi+1 = yi + 1 => Qi+1 = Qi + 2dy
+ Nếu XB < XA và mũi tên xuống
Nên Qi >= 0: yi+1 = yi => Qi+1 = Qi + 2dy
Và Qi < 0: yi+1 = yi -1=> Qi+1 = Qi - 2dx + 2dy
Tại thời điểm ban đầu: Q0 =
= Chú ý : y0= m.x0 +b
=
= Chú ý: rút gọn dx

Hay Q0 = ?5
+ Nếu mũi tên lên từ trái sang phải ?5 = dx –2dy
+ Nếu mũi tên xuống từ phải sang trái ?5 = dx + 2dy
+ Nếu mũi tên lên từ phải sang trái ?5 = dx + 2dy
+ Nếu mũi tên xuống từ trái sang phải ?5 = -dx - 2dy
Qi <= 0 (yi+1 = …) : Dựa vào cái trên chỗ XA XB
Qi > 0 (yi+1 = …): Dựa vào cái trên XA XB
TH2: |m| > 1
Từ phương trình đường thẳng đi qua 2 điểm A và B
y= mx +b
dy ( yB− yA)
Với m= dx = (xB−xA) = ?1 Nếu |?1|> 1, x=f(y)

Vẽ hình
Đặt
+ Nếu mũi tên từ trái sang phải: d1= x – xi và d2= xi + 1 – x
+ Nếu mũi tên từ phải sang trái: d1= x - (xi – 1) và d2= xi - x
Pt đường thẳng đi qua Q: dy(d1-d2) = ?2
+ Nếu mũi tên từ trái sang phải: ?2 = dy(2x-2xi-1)
+ Nếu mũi tên từ phải sang trái: ?2 = dy(2x-2xi+1)
Xét Qi thuộc đường thẳng tại thời điểm i:
Qi=dy[2(?3)-2xi +-1]
y i+1−b
+ Nếu mũi tên chỉ lên trên: ? 3=
m
y i−1−b
+ Nếu mũi tên chỉ xuống dưới: ? 3=
m
dy
= Chú ý : dx= m

=
Suy ra Qi =
y i+1−b
+ Nếu ?2 = dy(2x-2xi-1) và ? 3= thì áp dụng
m
y i−1−b
+ Nếu ?2 = dy(2x-2xi+1) và ? 3= thì
m

y i+1−b
+ Nếu ?2 = dy(2x-2xi+1) và ? 3= thì
m

y i−1−b
+ Nếu ?2 = dy(2x-2xi-1) và ? 3= thì
m
Xét Qi+1 là điểm kế tiếp sau Qi
Qi+1=
 Chú ý : yi+1 = yi-1

Qi+1 - Qi = ?4
+ Nếu mũi tên chỉ lên thì ?4 = -2dy(xi+1 - xi) + 2dx
+ Nếu mũi tên chỉ lên thì ?4 = -2dy(xi+1 - xi) - 2dx
Vì dy = YB … yA
+ Nếu YB > yA và mũi tên từ trái sang phải
Nên Qi <=0: xi+1 = xi => Qi+1 = Qi + 2dx
Và Qi>0: xi+1 = xi + 1 => Qi+1 = Qi -2dy + 2dx
+ Nếu YB > yA và mũi tên từ phải sang trái
Nên Qi <=0: xi+1 = xi -1 => Qi+1 = Qi +2dy + 2dx
Và Qi>0: xi+1 = xi => Qi+1 = Qi + 2dx
+ Nếu YB < yA và mũi tên từ trái sang phải
Nên Qi >= 0: xi+1 = xi => Qi+1 = Qi - 2dx
Và Qi < 0: xi+1 = xi + 1 => Qi+1 = Qi -2dy - 2dx
+ Nếu YB < yA và mũi tên từ phải sang trái
Nên Qi >= 0: xi+1 = xi -1 => Qi+1 = Qi +2dy - 2dx
Và Qi < 0: xi+1 = xi => Qi+1 = Qi - 2dx
Tại thời điểm ban đầu: Q0 =
 Chú ý : y0= m.x0 +b

 Chú ý: rút gọn dx
Hay Q0 = ?5
+ Nếu mũi tên lên từ trái sang phải ?5 = 2dx –dy
+ Nếu mũi tên xuống từ phải sang trái ?5 = -2dx + dy
+ Nếu mũi tên lên từ phải sang trái ?5 = 2dx +dy
+ Nếu mũi tên xuống từ trái sang phải ?5 = -2dx - dy
Qi <= 0 (xi+1 = …) : Dựa vào cái trên
Qi > 0 (xi+1 = …): Dựa vào cái trên

You might also like