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ố Thuật toán xấp xỉ Thuật toán Bresenham... Các thuật toán vẽ elip Xét cung AB: Vecto gradien
Trang 1Chương 2
Các thuật toán đồ hoạ c ơ ơ s s ở
Giảng viên: Ths.Vũ Minh Yến
Tổ HTTT- Khoa CNTT
Trang 2Nộ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
Trang 32.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
Trang 4A B
A
x x
A B
x x
y
y m
−
−
=
(x xA ) yAm
Trang 5Thuậ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
(4)
Trang 9Thu ậ t toán làm tròn s ố
TH4: |m| > 1 tương tự TH3 TH4
khi đổi vai trò x, y.
Bước 1: Nếu yA > yB thì: Hoán
Trang 10Thu ậ t toán Breseham
(6)
y
Trang 11Thu ậ t toán Breseham
TH3: TH3 0 < m ≤ 1
y
x O(0,0)
Trang 12Thu ậ t toán Breseham
Trang 13Thu ậ t toán Breseham
Trang 14Thu ậ t toán Breseham
Trang 15Thu ậ t toán Breseham
Xét P1= 2dy.x1-2dx.y1+ 2dy(1-xA)+2dx.yA-dx
= 2dy-dx =const
Trang 16Thu ậ t toán Bresenham
Trang 17Thuật toán Breseham
TH4: -1 ≤ m <0
Sinh viên tự xây dựng
thuật toán tương tự TH3:
Trang 18Thu ậ t toán Breseham
Trang 19x x
x
1 1
Trang 20x
Trang 212.2 Các thu ậ t toán v ẽ đ ư ờ ng trò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.
Thuật toán làm tròn số
Thuật toán xấp xỉ
Thuật toán Bresenham
Trang 22Thuậ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
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)
r x
x r
2 2
x
r −
Trang 23Thuật toán làm tròn số
Theo phương trình lư ợ ng giác c:
Bước 1: alpha=0; step=1/r;
Trang 24y r
x
α
α
cos '
sin '
Trang 251 0
'
+ +
+
+
→ +
i i
i i
step i
x step
y y
y
y y
α
α α
α
i i
y +1 ≈ +1 α +
i i
i
i i
i i
step i
y step
x x
x x
α
1
1
1 0
'
lim
α
step y
x
xi+1 ≈ i − i.
Trang 26Thuật toán Bresenham
y
x O
Trang 27Thuật toán Bresenham
Trang 28Thuật toán Bresenham
Trang 29Thuật toán Bresenham
Trang 302.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 )
, ( x y = b2x2 + a2 y2 − a2b2 =
F
x O
Trang 312.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ó:
Cung AM: ∆x=1 ⇒ ∆y≤1 ⇒ Lấy cơ sở theo x
Cung MB: ∆x=1 ⇒ ∆y≥1 ⇒ Lấy cơ sở theo y
)
(M
F Grad
F i
x
F y
x F
Grad
∂
∂+
∂
∂
=),(
y
F x
x a
b y
y a x
2 2
2 2
2
; 2
2
Trang 322.3 Các thuật toán vẽ elip
O
A
B M
Trang 332.3 Các thuật toán vẽ elip
Thu ậ t toán Bresenham: n Bresenham: (xét tương tự đường tròn)
Tính trên cung AM:
2 1
2 1
1 i
i 1
i
1 y
1;
x x
d d
y
d d
y
i i
y
x O
d2≈
≈ d1
xi xi+1
yi
Trang 342.3 Các thuật toán vẽ elip
Thuật toán Vanaken:
Trang 352.4 Các thuật toán clipping
Trang 36Thuật toán Cohen-Surtheland
nằm hoàn toàn trong cửa sổ
TH2: Nếu KOD(A) and TH2:
1001 0001
0101
y1
y2
Trang 37Thuật toán Cohen-Surtheland
1001 0000
A B
A B
A
A
y x
x x x
y y
y
x x
1 1
1 1
A B
A B
A
A
y x
x x x
y y
y
x x
2 2
1 1
Trang 38Thuật toán Cohen-Surtheland
A B
A B
A
A
x y
y y y
x x
x
y y
1
1
1 1
A B
A B
A
A
x y
y y y
x x
x
y y
2
2
1 1
Trang 39Thuậ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)=
Tính A1=AB ∩ cửa sổ và A=A1
Nếu b1=1: A=A1=AB∩(x=x1)
y x
x x
x
y y
y
A
A A
A B
A B
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)
x y
y y y
x x x
A
A A
A B
A B
y x
x x x
y y
y
A
A A
A B
A B
x y
y y y
x x x
A
A A
A B
A B
A
Trang 40Thuậ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ổ
2 1
x
y y
y
x x
=
−
= +
=
] 1
; 0 [
y y
dy tdy
y y
x x
dx tdx
x x
A B
A
A B
≤
≤ +
≤
1 0
2 1
2 1
t
y tdy
y y
x tdx
x x
A A
(1)
Trang 41Thuật toán Liang-Basky
2 1 2 1
t
y y
tdy
y y
tdy
x x
tdx
x x
tdx
A A A A
4
1 3
3
2 2
2
1 1
1
y y
q dy
p
y y
q dy
p
x x
q dx
p
x x
q dx
p
A A A A
4
;
1 )
2
(
t
i q
tpi i
}4
;1,
0
|{
}4
;1,
0
|{
i L
i p
i K
i i
/
/)
3(
t
L i
p q
t
K i
p q
t
i i
i i
(2)
(3)
(4)
Đặt:
Trang 42Thuật toán Liang-Basky
q t
K
i p
q t
i i i i
0 max
1 min
)
4
(
U U
1 min
q t
K i p
q t
i i i i
1
⇒
Trang 43Thuật toán Liang-Basky
; 0
; 1
2 4
4
1 3
3
2 2
2
1 1
y y q
dy p
y y q dy
p
x x q
dx p
x x q dx
p
y y dy x
x dx
A A A A
A B A
1 1
; max
, min
t p
q t
t p
q t
i i i i
dx t x
x B
dy t y y
dx t x
x A
A B
A B
A A
A A
2
2 1
1
1 1
1 1 1 1
Trang 442.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.
Trang 45Thuậ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ô.
Trang 46Thuật toán vết dầu loang
Mô t ả :
15 14
25 16 13
18 17 12 11
19
(x,y)
8 9 10
24 20 1
7
23 21 2
6
22 3
4 5
Trang 47Thuật toán vết dầu loang
Trang 48Thu ậ t toán tô màu theo đư ờ ng biên
Input:
Output: Tô màu miền khép kín trên bằng mầu tô Output:
Trang 49Thu ậ t toán tô màu theo đư ờ ng biên
Trang 50Thu ậ t toán tô màu theo đư ờ ng biên
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:
Trang 51Thu ậ t toán tô màu theo dòng quét
Trang 52Thu ậ 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ạ độ
y y y
xA xD
1
xB y
y y y
xB xC
2
B A
Trang 53Thu ậ t toán tô màu theo dòng quét
Á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
Trang 54Thu ậ t toán tô màu theo dò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
A3 A2
A4
A5
A6
A7 A8
Trang 55Thu ậ t toán tô màu theo dòng quét
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
Trang 56Thu ậ t toán tô màu theo dòng quét
Cài đặt: tham khảo tài liệu