Bài toán:
 Input: Cho đoạn thẳng AB: A(xA; yA), B(xB; yB).
 Output: Vẽ đoạn thẳng AB trên màn hình.
 Giải quyết bài toán
 Thuật toán làm tròn số
 Thuật toán Bresenham
                
              
                                            
                                
            
                       
            
                 56 trang
56 trang | 
Chia sẻ: lylyngoc | Lượt xem: 2396 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Chương 2 Các thuật toán đồ hoạ cơ sở, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2
Các thuật toán đồ hoạ cơ sở
Giảng viên: Ths.Vũ Minh Yến
Tổ HTTT- Khoa CNTT
Nội dung
2.1. Các thuật toán vẽ đoạn thẳng
2.2. Các thuật toán vẽ đường tròn
2.3. Các thuật toán vẽ elip
2.4. Các thuật toán clipping
2.5. Các thuật toán tô màu
2.1. Các thuật toán vẽ đoạn thẳng
 Bài toán:
 Input: Cho đoạn thẳng AB: A(xA; yA), B(xB; yB).
 Output: Vẽ đoạn thẳng AB trên màn hình.
 Giải quyết bài toán
 Thuật toán làm tròn số
 Thuật toán Bresenham
Thuật toán làm tròn số
 Phương trình đường thẳng AB (xA ≠ xB):
 Đặt 
 Khi đó phương trình đường thẳng AB:
AA
AB
AB yxx
xx
yyy +−
−
−
= )(
AB
AB
xx
yy
m
−
−
=
( ) AA yxxmy +−=
Thuật toán làm tròn số
 Chia thành 4 trường hợp:
 TH1: AB song song với Oy
 TH2: AB song song với Ox
 TH3: |m|≤1
 TH4: |m|>1
m
=
1
m
=
-1
(1)
y
O x
(4)
(3)
(3)
(2)
(4)
Thuật toán làm tròn số
 TH1: xA=xB (giả sử yA < yB)
 Bước 1: x=xA; y=yA;
 Bước 2: Vẽ điểm (x; y);
 Bước 3: y=y+1;
 Bước 4: Nếu y<=yB thì: Bước 2;
 Bước 5: Kết thúc.
A
y
O x
B
xA=xB
yA
yB
Thuật toán làm tròn số
 TH2: yA=yB (Tương tự TH1)
(Giả sử xA< xB)
 Bước 1: x=xA; y=yA;
 Bước 2: Vẽ điểm (x; y);
 Bước 3: x=x+1;
 Bước 4: Nếu x<=xB thì: Bước 2;
 Bước 5: Kết thúc.
A
y
O
B
xA
yA=yB
xB
Thuật toán làm tròn số
 TH3: |m| ≤ 1
 Bước 1: Nếu xA > xB thì: Hoán 
đổi vị trí A,B
(Đảm bảo xA < xB)
 Bước 2: x=xA; y=yA;
 Bước 3: Vẽ điểm (x; y);
 Bước 4: x=x+1; 
y=Round(m(x-xA)+yA);
 Bước 5: Nếu x≤ xB thì: Bước 3;
 Bước 6: Kết thúc;
m
=
1
m
=
-1
y
O x
A
B
xA xB
Thuật toán làm tròn số
 TH4: |m| > 1 tương tự TH3 
khi đổi vai trò x, y.
 Bước 1: Nếu yA > yB thì: Hoán 
đổi vị trí A,B
(Đảm bảo yA < yB)
 Bước 2: x=xA; y=yA;
 Bước 3: Vẽ điểm (x; y);
 Bước 4: y=y+1; 
x=Round(1/m(y-yA)+xA);
 Bước 5: Nếu y≤ yB thì: Bước 2;
 Bước 6: Kết thúc;
m
=
1
m
=
-1
y
O x
A
B
yA
yB
Thuật toán Breseham
 TH1 xA=xB, TH2: yA=yB: 
giống phương pháp 
làm tròn số. 
 Còn lại: chia làm 4 
trường hợp
 TH3: 0 < m ≤ 1
 TH4: -1 ≤ m <0
 TH5: m > 1
 TH6: m < -1
m
=1
(3)
(4)
(5)
(6)
O x
y
Thuật toán Breseham
 TH3: 0 < m ≤ 1
y
xO(0,0)
d1
d2
yi
yi+1= ?
xi xi+1=xi+1
Thuật toán Breseham
 Cơ sở toán học xây dựng thuật toán:
 Giả sử ta có điểm thứ i: (xi; yi)
 Xác định điểm thứ i+1: (xi+1; yi+1)=?
 Ta có: 0< m ≤ 1
⇒ Nếu ∆x=1⇒ ∆y≤1, trong đó ∆x=xi+1-xi; ∆y=yi+1-yi
 Như vậy:
 xi+1= xi+1
 yi+1= yi nếu d1 ≤ d2
yi+1= yi+1 nếu d1>d2
α ≤ 450
Thuật toán Breseham
 Xét d1= y(xi+1) - yi
⇔ d1=m(xi+1-xA)+yA-yi
=m(xi+1-xA)+yA-yi
=mxi-yi+m(1-xA)+yA
 Xét d2= yi+1 - y(xi+1)
= yi+1- m(xi+1-xA)-yA
=-mxi+yi-m(1-xA)-yA+1
 Xét Pi=dx(d1-d2)
= dx(2mxi-2yi+2m(1-xA)+2yA-1)
= 2dy.xi-2dx.yi+ 2dy(1-xA)+2dx.yA-dx
Thuật toán Breseham
 Tương tự ta có
Pi+1= 2dy.xi+1-2dx.yi+1+ 2dy(1-xA)+2dy.yA-dx
 Xét ∆P=Pi+1-Pi
=2dy(xi+1-xi) – 2dx(yi+1-yi)
=2dy-2dx(yi+1-yi)
 Giả sử Pi≥0 ⇔ d1-d2 ≥ 0 ⇔ d1 ≥ d2 ⇔ yi+1=yi+1
⇒ ∆P=2dy-2dx=const1
 Giả sử Pi<0 ⇔ d1-d2<0 ⇔ d1<d2 ⇔ yi+1=yi
⇒ ∆P=2dy=const2
Thuật toán Breseham
 Xét P1= 2dy.x1-2dx.y1+ 2dy(1-xA)+2dx.yA-dx
= 2dy.xA-2dx.yA+2dy-2dy.xA+2dx.yA-dx
= 2dy-dx=const
Thuật toán Bresenham
 Thuật toán:
 Bước 1: Nếu xA>xB thì: Hoán đổi A, B
 Bước 2: dx=xB-xA; dy=yB-yA;
const1=2dy-2dx; const2=2dy; 
p=2dy-dx; x=xA; y=yA;
 Bước 3: Vẽ điểm (x,y)
 Bước 4: x=x+1;
 Bước 5: Nếu p>0 thì: y=y+1; p=p+const1; 
còn lại: p=p+const2;
 Bước 6: Nếu x ≤ xB thì: Bước 3;
 Bước 7: Kết thúc
Thuật toán Breseham
 TH4: -1 ≤m <0
Sinh viên tự xây dựng 
thuật toán tương tự TH3:
 const1=2dy+2dx; 
const2=2dy; p1=2dy+dx;
 Nếu p>0 thì: p=p+const2;
Còn lại: y=y-1; p=p+const1;
Thuật toán Breseham
 TH5: m > 1 
 Đổi vai trò x, y cho nhau 
ta có TH3.
 TH6: m < -1
 Đổi vai trò x, y cho nhau 
ta có TH4.
(5) (6)
y
O x
2.2. Các thuật toán vẽ đường tròn
 Xét đường tròn tâm O(0;0), 
bán kính r.
 Phương trình đại số: 
x2+y2=r2
 Phương trình lượng giác:
Với 
 Xét đường tròn tâm A(xA; yA), 
bán kính r:
 (A;r) là ảnh của (O;r) qua phép 
tịnh tiến
 Ta có:
=
=
α
α
sin
cos
ry
rx
[ ]piα 2;0∈
O x
y
x
y
M
α
r
OA
+=
+=
A
A
yyy
xxx
1
1
x
y
O
A
M(x;y)
M1(x1;y1)
xA
yA
2.2. Các thuật toán vẽ đường tròn
 Tính chất đối xứng:
Xét điểm M1(x,y)∈(O;r) , khi đó:
 M2(y,x)
 M3(y,-x)
 M4(x,-y)
 M5(-x,-y)
 M6(-y,-x)
 M7(-y,x)
 M8(-x,y)
M1
M2
M3
M4M5
M6
M7
M8
O
y
x
2.2. Các thuật toán vẽ đường tròn
 Bài toán:
 Input: Cho tâm O(0,0), bán kính r
 Output: Vẽ đường tròn tâm O, bán kính r.
 Giải quyết bài toán:
 Thuật toán làm tròn số
 Thuật toán xấp xỉ
 Thuật toán Bresenham
Thuật toán làm tròn số
 Theo phương trình đại số: 
 Cung AB: 
 Xét trên cung AB: nếu ∆x=1 thì
|∆y|≤1 nên lấy cơ sở theo x
 Thuật toán:
 Bước 1: x=0; y=r;
 Bước 2: Vẽ 8 điểm: 
M1(x,y), M2(y;x),M3(y;-x), M4(x;-y), 
M5(-x;-y), M6(-y;-x), M7(-y;x), M8(-x;y)
 Bước 3: x=x+1; y= round( )
 Bước 4: Nếu x ≤ y thì: Bước 2;
 Bước 5: Kết thúc.
B
O
y
x
A[ ]2/;0,22 rxxry ∈−=
22 xr −
Thuật toán làm tròn số
 Theo phương trình lượng giác:
 Bước 1: alpha=0; step=1/r;
 x=r; y=0;
 Bước 2: Vẽ tám điểm: ...
 Bước 3: alpha=alpha+step;
 x=r.cos(alpha); y=r.sin(alpha);
 Bước 4: Nếu x>=y: Bước 2;
 Bước 5: Kết thúc.
O x
y
x
y
M
α
r
Thuật toán xấp xỉ
 Ta có phương trình (O;r):
 Xét đạo hàm theo đối số α:
=
=
α
α
sin
cos
ry
rx [ ]piα 2;0∈
==
−=−=
xry
yrx
α
α
cos'
sin'
Thuật toán xấp xỉ
 Xét đạo hàm tại điểm thứ i:
⇔
 Xét đạo hàm tại điểm thứ i+1:
⇔
 Thuật toán:
 Bước 1: stepα=1/r; 
x=r; y=0;
 Bước 2: Vẽ 8 điểm
 Bước 3: x=x-y.stepα; 
y=x.stepα + y;
 Bước 4: 
Nếu x≥y thì: Bước 2;
 Bước 5: Kết thúc;
1
1
1
1
0
'
1 lim
+
+
+
+
→
+
≈
−
≈
−
−
=
−
i
ii
ii
ii
step
i
x
step
yy
yyy
α
ααα
iii ystepxy +≈ ++ α.11
i
ii
ii
ii
step
i
y
step
xx
xx
x
−≈
−
≈
−
−
=
+
+
+
→ +
α
ααα
1
1
1
0
' lim
αstepyxx iii .1 −≈+
Thuật toán Bresenham
y
xO
d2≈
≈d1
xi xi+1
yi
yi-1
 Giả sử ta có điểm 
thứ i: (xi; yi)
 Tính điểm thứ i+1: 
(xi+1; yi+1)=?
Thuật toán Bresenham
 d1 = yi2 - y(xi+1)2
= yi2 - (R2- (xi + 1)2 ) 
 d2 = y(xi+1)2 - (yi - 1)2
= (R2- (xi + 1)2 ) - (yi - 1)2
 Pi = d1 - d2
= 2(xi+1)2 + 2yi2 - 2yi- 2R2 + 1
 Tương tự ta có:
Pi+1= 2(xi+2)2 + 2yi+12- 2yi+1 - 2R2+1
Thuật toán Bresenham
 Xét ∆P = Pi+1 - Pi
= 4xi + 6 + 2(yi+12 - yi2 ) - 2(yi+1 - yi) 
 Nếu Pi < 0: yi+1 = yi
Pi+1 = Pi + 4xi +6
 Nếu Pi >= 0: yi+1 = yi - 1. 
Pi+1 = Pi + 4(xi - yi ) + 10. 
 Xét P1 khi đó: ( x1 ; y1) =(0;R)
P1= 2(x1+1)2 + 2y12 - 2y1- 2R2 + 1
= 3 - 2R. 
Thuật toán Bresenham
 Thuật toán:
 Bước 1: x=0; y=R; p=3-2R;
 Bước 2: Vẽ tám điểm
 Bước 3: Nếu p>0 thì: p=4(x-y)+10; y=y-1;
còn lại: p=p+ 4x+6
 Bước 4: x=x+1;
 Bước 5: Nếu x≤ y thì: Bước 2;
 Bước 6: Kết thúc.
2.3. Các thuật toán vẽ elip
 Phương trình elip tâm O(0;0), bán kính a, b:
 Tính chất đối xứng
0),( 222222 =−+= bayaxbyxF
xO
y
M1(x,y)
M3(-x,-y) M2(x,-y)
M1(-x,y)
A
B
2.3. Các thuật toán vẽ elip
 Xét cung AB:
 Vecto gradient tại M có 
độ dốc bằng 1.
 Ta có:
 Vậy M chia AB thành 2 cung:
 Cung AM: ∆x=1 ⇒ ∆y≤1 ⇒ Lấy cơ sở theo x
 Cung MB: ∆x=1 ⇒ ∆y≥1 ⇒ Lấy cơ sở theo y
)(MFGrad
O
A
B
M
j
y
Fi
x
FyxFGrad
∂
∂
+
∂
∂
=),(
y
F
x
F
∂
∂
=
∂
∂
⇒
⇒=⇔=⇔ x
a
b
xMx
a
byyaxb 2
2
2
2
22 ;22
2.3. Các thuật toán vẽ elip
 Thuật toán làm tròn số:
 Tính trên cung AM:
 Bước 1: x=0; y=b;
 Bước 2: Vẽ 4 điểm
 Bước 3: x=x+1; 
 Bước 4: Nếu y≥ xb2/a2 thì: Bước 2;
 Bước 5: Kết thúc.
 Tính trên cung MB: tương tự như tính trên cung AM khi 
đổi vai trò x và y.
( ) ;/ 22 xaaby −=
)(MFGrad
O
A
B
M
2.3. Các thuật toán vẽ elip
 Thuật toán Bresenham: (xét tương tự đường tròn)
 Tính trên cung AM:
Giả sử có điểm thứ i (xi; yi). 
Tính điểm thứ i+1 (xi+1; yi+1)=? 
>−
≤
=
+=
+
+
21
21
1i
i1i
1
y
1; xx
ddy
ddy
i
i
y
xO
d2≈
≈d1
xi xi+1
yi
2.3. Các thuật toán vẽ elip
 Thuật toán Vanaken:
2.4. Các thuật toán clipping
 Bài toán:
 Input: 
 Cho cửa sổ: (x1; y1), (x2; y2)
 Cho đoạn thẳng AB: (xA;yA), (xB; yB)
 Output:
 Hiển thị phần đoạn thẳng AB 
trong cửa sổ.
O x
y
Thuật toán Cohen-Surtheland
 Xét điểm P(x; y): 
 Quy ước: KOD(P)=b4b3b2b1 (bi={0;1})
 b1=1: nếu x < x1
 b2=1: nếu x > x2
 b3=1: nếu y < y1
 b4=1: nếu y > y2
 KOD(P)=0000 ⇔ P thuộc cửa 
sổ
 TH1: Nếu 
KOP(A)=KOD(B)=0000: AB 
nằm hoàn toàn trong cửa sổ.
 TH2: Nếu KOD(A) and 
KOD(B)0000: AB nằm hoàn 
toàn ngoài cửa sổ.
0000
0100 0110
0010
101010001001
0001
0101
y1
y2
x1 x2
Thuật toán Cohen-Surtheland
 TH3: Còn lại: AB có ít nhất 
một đầu nằm ngoài cửa sổ, 
giả sử là A.
 Khi đó, KOD(A)=b4b3b2b1
 Xác định A1(xA1;yA1)=?:
 Nếu b1=1: A1=AB∩(x=x1)
 Nếu b2=1: A1=AB∩(x=x2)
0000
0100 0110
0010
101010001001
0000
0101
y1
y2
x1 x2
A
A1
B( )
+−
−
−
=
=
AA
AB
AB
A
A
yxx
xx
yyy
xx
1
1
1
1
( )
+−
−
−
=
=
AA
AB
AB
A
A
yxx
xx
yyy
xx
2
2
1
1
Thuật toán Cohen-Surtheland
 Nếu b3=1: A1=AB∩(y=y1)
 Nếu b4=1: A1=AB∩(y=y2)
 Gán A=A1 ta được đoạn AB mới.
( )
+−
−
−
=
=
AA
AB
AB
A
A
xyy
yy
xx
x
yy
1
1
1
1
( )
+−
−
−
=
=
AA
AB
AB
A
A
xyy
yy
xx
x
yy
2
2
1
1
Thuật toán Cohen-Surtheland
 Thuật toán:
 Bước 1: Tính KOD(A), KOD(B)
 Bước 2: Nếu KOD(A)= 
KOD(B)=0000: Vẽ AB và thực 
hiện Bước 6;
 Bước 3: Nếu KOD(A) and 
KOD(B) 0000: Bước 6;
 Bước 4: Còn lại: 
Tính A1=AB ∩ cửa sổ và A=A1
 Nếu b1=1: A=A1=AB∩(x=x1)
( )
=
+−
−
−
=
1
1
xx
yxx
xx
yyy
A
AA
AB
AB
A
 Nếu b2=1: A=A1=AB∩ (x=x2)
 Nếu b3=1: A=A1=AB ∩ (y=y1)
 Nếu b4=1: A=A1=AB ∩ (y=y2)
 Bước 5: Bước 1; 
 Bước 6: Kết thúc.
( )
=
+−
−
−
=
1
1
yy
xyy
yy
xx
x
A
AA
AB
AB
A
( )
=
+−
−
−
=
2
2
xx
yxx
xx
yyy
A
AA
AB
AB
A
( )
=
+−
−
−
=
2
2
yy
xyy
yy
xx
x
A
AA
AB
AB
A
Thuật toán Liang-Basky
 Phương trình đoạn AB dạng tham số:
 Điểm M(x, y) thuộc cửa sổ
⇔
 Điểm M(x,y) vừa thuộc cửa sổ vừa thuộc đoạn AB:
≤≤
≤≤
21
21x
yyy
xx
∈−=+=
−=+=
]1;0[; tyydytdyyy
xxdxtdxxx
ABA
ABA
≤≤
≤+≤
≤+≤
10
21
21
t
ytdyyy
xtdxxx
A
A
(1)
Thuật toán Liang-Basky
(1)
≤≤
+−≤
−≤−
+−≤
−≤−
⇔
10
2
1
2
1
t
yytdy
yytdy
xxtdx
xxtdx
A
A
A
A
;;
;;
;;
;;
234
133
222
111
yyqdyp
yyqdyp
xxqdxp
xxqdxp
A
A
A
A
+−==
−=−=
+−==
−=−=
 Đặt:
≤≤
∈≤
⇔⇒
10
4;1)2(
t
iqtp ii
}4;1,0|{
}4;1,0|{
∈<=
∈≥=
ipiL
ipiK
i
i
≤≤
∈≥
∈≤
⇔⇒
10
/
/
)3(
t
Lipqt
Kipqt
ii
ii
(2)
(3)
(4)
 Đặt:
Thuật toán Liang-Basky
{ }
{ }
∈
≥
∈
≤
⇔⇒
Li
p
q
t
Ki
p
q
t
i
i
i
i
0max
1min
)4(
U
U
 Đặt 
{ }
{ }
∈=
∈=
0max
1min
2
1
U
U
Li
p
q
t
Ki
p
q
t
i
i
i
i
12 ttt ≤≤⇒
Thuật toán Liang-Basky
;0;1
;;
;;
;;
;;
;;
21
244
133
222
111
==
+−==
−=−=
+−==
−=−=
−=−=
tt
yyqdyp
yyqdyp
xxqdxp
xxqdxp
yydyxxdx
A
A
A
A
ABAB
=
=
22
11
;max
,min
t
p
q
t
t
p
q
t
i
i
i
i
 Thuật toán:
 Bước 1: 
 Bước 2: i=1→4:
 Nếu pi>0:
 Nếu pi<0: 
 Bước 3: Nếu t1≥ t2:
 Tính A1B1:
 Vẽ A1B1
 Bước 4: Kết thúc.
+=
+=
+=
+=
dytyy
dxtxx
B
dytyy
dxtxx
A
AB
AB
AA
AA
2
2
1
1
1
1
1
1
1
1
2.5. Các thuật toán tô màu
 Thuật toán vết dầu loang
 Thuật toán tô màu theo đường biên
 Thuật toán tô màu theo dòng quét.
Thuật toán vết dầu loang
 Bài toán:
 Input: 
 Miền khép kín xác định bởi mầu biên: mb
 Một điểm M(x; y) thuộc miền cần tô
 Mầu tô: mt
 Output: Tô màu miền khép kín trên bằng mầu tô.
Thuật toán vết dầu loang
 Mô tả:
1514
251613
18171211
19(x,y)8910
242017
232126
22345
Thuật toán vết dầu loang
 Thuật toán:
 Void Tomauloang(x, y, mb, mt)
{
if (màu(x,y)!=mb and màu(x,y)!=mt)
{
Tô_màu_điểm(x,y, mt);
Tomauloang(x,y-1,mb,mt);
Tomauloang(x+1,y,mb,mt); 
Tomauloang(x,y+1,mb,mt); 
Tomauloang(x-1,y,mb,mt); 
}
}
Thuật toán tô màu theo đường biên
 Bài toán: giống thuật toán vết dầu loang
 Input: 
 Miền khép kín xác định bởi mầu biên: mb
 Một điểm M(x; y) thuộc miền cần tô
 Mầu tô: mt
 Output: Tô màu miền khép kín trên bằng mầu tô.
Thuật toán tô màu theo đường biên
 Xét miền cần tô là
miền lồi theo trục 
Oy
x2
(x,y)x1
(x
,
y)
x2x1
x1
O
y
Thuật toán tô màu theo đường biên
 Thuật toán: (áp dụng với i={1, -1})
 Bước 1: Tìm biên trái nhất và biên phải nhất
x1=x; x2=x;
while (màu(x1-1,y)mb) x1=x1-1;
while (màu(x2+1,y)mb) x2=x2+1;
 Bước 2: Vẽ đoạn (x1,y) và (x2,y) bằng màu tô (mt)
 Bước 3: Tính điểm phát triển tiếp theo:
while(màu(x1,y+i)=mb) x1=x1+1;
 Bước 4: Nếu x1<=x2:
 x=x1; y=y+i;
 Bước1;
 Bước 5: Kết thúc.
Thuật toán tô màu theo dòng quét
 Tô màu hình thang cơ bản
 Tô màu n giác
Thuật toán tô màu theo dòng quét
 Tô màu hình thang cơ bản:
 Định nghĩa hình thang cơ bản: là hình thang có đáy song 
song với một trục toạ độ.
 Thuật toán:
 Bước 1: y=y1;
 Bước 2: Tính xM1, xM2
 Bước 3: Nối M1 và M2 bằng mt
 Bước 4: y=y+1;
 Bước 5: Nếu y≤y2: Bước 2;
 Bước 6: Kết thúc.
xAyy
yy
xAxD
xM +−
−
−
= )1(
121
xByy
yy
xBxC
xM +−
−
−
= )1(
122
D C
BA
xA xD xC xBO
y
x
y2
y1
(d)M1 M2y
Thuật toán tô màu theo dòng quét
 Tô màu hình thang cơ bản:
 Áp dụng: Tô màu đa giác A1A2...A9
 Gọi thủ tục tô màu hình 
thang cơ bản cho các hình 
1, 2, 3, 4, 5, 6, 7, 8
A1
A2
A3
A4
A5
A6
A7
A8
A9
1 2
3
4
5
6
7
8
Thuật toán tô màu theo dòng quét
 Tô màu n giác tổng quát:
 Bài toán:
 Input: 
 Cho các đỉnh của n giác: 
A1 , A2 , ... , An
 Cho màu tô (mt)
 Output: Tô màu n giác 
trên bằng màu mt.
A1
A3A2
A4
A5
A6
A7
A8
A9
O
y
ymax
ymin
M1 M2 M3 M4
M1 M2 M3 M4
M1 M2
M1 M2=M3 M4
Thuật toán tô màu theo dòng quét
 Tô màu n giác tổng quát:
 Thuật toán:
 Bước 1: Tìm ymin, ymax của tung độ các đỉnh n giác.
 Bước 2: y=ymin; (d)
 Bước 3: Xác định các giao điểm của dòng quét (d) với 
cạnh n giác, và sắp xếp tăng dần theo hoành độ, giả sử
là: M1, M2, ..., M2k
 Bước 4: Nối các giao điểm M2i+1 và M2i+2 bằng mt
với i={0,1,... ,k-1}
 Bước 5: Nếu y≤ ymax: Bước 3;
 Bước 6: Kết thúc.
Thuật toán tô màu theo dòng quét
 Tô màu n giác tổng quát:
 Cài đặt: tham khảo tài liệu