Đồ họa Raster - Các thuật toán vẽ đường thẳng (Phần 4)

bước 1 Kẻ biên vùng cần tô

bước 2 Xác định một điểm (x, y) nằm bên trong vùng cần

bươc 3 Tô điểm (x, y), sau đó tô loang sang những điểm

lân cận

pdf44 trang | Chuyên mục: Đồ Họa Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1898 | Lượt tải: 4download
Tóm tắt nội dung Đồ họa Raster - Các thuật toán vẽ đường thẳng (Phần 4), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ĐỒ HỌA RASTER
CÁC THUẬT TOÁN TÔ MÀU
Giảng viên : Bùi Tiến Lên
Bài toán tô màu
Tô màu là thao tác tìm các điểm sáng “nằm bên trong” 
một vùng khép kín.
Input :
Vùng S
Output : 
{(x1, y1), (x2, y2) … (xn, yn)}
Trang 2
Các hướng tiếp cận
Có hai phương pháp 
- Tô màu theo lân cận
- Tô màu theo dòng quét
Trang 3
Tô màu theo lân cận
Lân cận là gì ?
Có hai loại lân cận : lân cận 4 và lân cận 8.
Lân cận 4
N4(x, y) = {(x-1, y), (x, y+1), (x+1, y), (x, y-1)}
Lân cận 8
N8(x, y) = {(x-1, y), (x-1, y+1), (x, y+1), (x+1, y+1), (x+1, y), 
(x+1, y-1), (x, y-1), (x-1, y-1)}
Trang 5
(x,y) phảitrái
dưới
trên
x
y (x,y)
x
y
trái
Thuật toán đệ qui
bước 1 Kẻ biên vùng cần tô
bước 2 Xác định một điểm (x, y) nằm bên trong vùng cần 
tô
bươc 3 Tô điểm (x, y), sau đó tô loang sang những điểm 
lân cận
Trang 6
x
y
Cài đặt đệ qui
// To loang
void BoundaryFill(CDC *pDC, int x, int y, 
int fill_color, int boundary_color)
{
int color;
color = pDC->GetPixel(x, y);
if((color != fill_color) && (color != boundary_color))
{
pDC->SetPixel(x, y, fill_color);
Trang 7
BoundaryFill(pDC, x-1, y, fill_color, boundary_color);
BoundaryFill(pDC, x, y+1, fill_color, boundary_color);
BoundaryFill(pDC, x+1, y, fill_color, boundary_color);
BoundaryFill(pDC, x, y-1, fill_color, boundary_color);
}
}
Nhận xét thuật toán đệ qui
Ưu điểm
Có thể tô vùng có hình dạng 
bất kỳ.
Khuyết điểm
Không thể dùng để tô các 
vùng có kích thước lớn.
Trang 8
kích thước 
!
Thuật toán cải tiến
bước 1
Cất điểm hạt giống đầu tiên vào kho.
bước 2
Lặp nếu kho không rỗng
- c1 Lấy điểm hạt giống.
- c Tô điểm hạt giống sau đó tô loang sang trái và 
Trang 9
2
sang phải.
- c3 Bổ sung những điểm hạt giống mới vào kho từ 
dòng trên và dòng dưới.
Thuật toán cải tiến
hạt giống : điểm sáng
kho : chứa các điểm hạt giống
Trang 10
Thuật toán cải tiến
biên biên
Minh họa tô loang
Trang 11
Thuật toán cải tiến
Tiêu chuẩn để là điểm hạt giống
1. Điểm này chưa được tô và không phải điểm biên.
2. Điểm này thoả :
- Điểm trái đầu tiên.
- hoặc bên trái của nó là điểm biên (nếu nó không 
phải là điểm trái đầu tiên).
Trang 12
Thuật toán cải tiến
biên biên
Minh họa bổ sung những điểm hạt giống mới
Trang 13
biên biên
biên
hạt giống
Tô theo lân cận - Một số vấn đề
Sử dụng 
lân cận nào ?
Trang 14
Tô theo lân cận - Một số vấn đề
Đường biên
màu gì ?
Trang 15
Tô theo lân cận - Một số vấn đề
Trang 16
Tô màu theo dòng quét
Khái niệm dòng quét
Dòng quét là dòng điểm sáng trên màn hình
y
Trang 18
Tô hình chữ nhật
l r
ty
Trang 19
b
y
Tô hình tam giác
Input
(X1, Y1), (X2, Y2), (X3, Y3)
Cách tô
bước 1 : Sắp xếp các đỉnh
Y ≤ Y ≤ Y
Trang 20
1 2 3
bước 2 : Phân trường hợp
Theo tung độ
Tô hình tam giác
Y1 = Y2 = Y3
1 3 2
Y1 < Y2 = Y3
1
2 3
Trang 21
Y1 = Y2 < Y3
12
3
Y1 < Y2 < Y3
1
2
3
Tô hình tam giác
1 3 2Y1
X X
Trang 22
Tô tam giác (Y1 = Y2 = Y3)
1. Tìm Xmin, Xmax
2. Tô dòng Y1 bắt đầu tại cột Xmin, kết thúc tại cột Xmax
min max
Tô hình tam giác
Tô tam giác (Y1 < Y2 = Y3)
Lặp y : Y1 … Y2
1. Tìm hoành độ giao điểm xl, xr
giữa dòng quét y với các cạnh 
2 3
Y2
y
Trang 23
trái và cạnh phải của tam giác.
2. Tô dòng y bắt đầu tại cột xl, kết 
thúc tại cột xr.1
Y1y
xl xr
Tô hình tam giác
Ví dụ 
Các hoành độ giao điểm của các dòng quét với cạnh 
(2, 2), (11, 6).
6
5
4
2
Trang 24
3
2
1
8
4
17
4
26
4
35
4
44
4
Tô hình tam giác
12
cumoi
1
XX
k
với
kxx
X là đầu x
điểm giao độ hoành tính Cách
−
=
+=
1
2
Trang 25
12 YY −
Tô hình tam giác
2
3
Y2
Y3
Trang 26
1
Y1y
Tô hình đa giác lồi
Cách tô
1. Chia đa giác lồi có n đỉnh 
{p0, p1, ... , pn-1} thành n-2 
tam giác.
- ∆1 p0p1p2
- ∆ p p p
p
0
p
1
p
2
p
3
Trang 27
2 0 2 3
- ...
- ∆i p0pipi+1
- ...
- ∆n-2 p0pn-2pn-1
2. Tô từng tam giác.
p
1
p
2
p
3
p
n-2
p
n-1
p
0
Tô hình đa giác
Nguyên lý chia tam giác
Mọi đa giác không tự cắt đều có thể phân chia thành các 
tam giác.
Trang 28
Thuật toán tô đa giác tổng quát
Thuật toán
bước 1 Tìm ymin và ymax
ymin = min{yi, (xi, yi) ∈ P}
ymax = max{yi, (xi, yi) ∈ P}
bước 2 Tô từng dòng
ymax
y
I1 I2 I3 I4
P
Trang 30
Lặp y : ymin … ymax
c1 Tìm các giao điểm.
c2 Sắp xếp các giao điểm.
c3 Tô các đoạn thẳng.
yminy
Lưu ý
Bỏ cạnh nằm ngang
Trang 31
bỏ
bỏ
Lưu ý
Dòng quét đi qua đỉnh
a
b
c
d
e
Trang 32
f
g
h
I1 I2 I3 I4
Bình thường
y
Lưu ý
Dòng quét đi qua đỉnh
a
b
c
d
e
I1 I2 I3 I4 I5
Lỗi
y
Trang 33
f
g
h
Lưu ý
Cắt bớt cạnh c theo trục y 1 đơn vị
a
b
c
d
e
I1 I2 I3 I41y
1
Trang 34
f
g
h
Ví dụ
6
7
8
9
b
c
d
{(1, 1) (2, 7) (4, 9) (7, 9) (9, 5) (9, 1) (7, 1) (5, 5) (4, 1)}
Trang 351 2 3 4 5 6 7 8 9
1
2
3
4
5
a
e
f
gh
i
Tiền xử lý 1
6
7
8
9
b
d
Loại bỏ các cạnh
c
Trang 361 2 3 4 5 6 7 8 9
1
2
3
4
5
a
e
gh
{c, f, i}
fi
Tiền xử lý 2
6
7
8
9
b
d
Trang 371 2 3 4 5 6 7 8 9
1
2
3
4
5 Xử lý các cạnh
{a, e}a
e
gh
Tô
6
7
8
9
b
d
k=1
k=-3/4
Trang 381 2 3 4 5 6 7 8 9
1
2
3
4
5
a
e
gh
k=1/6
k=0
k=-1/2k=1/4
Thông tin cạnh đa giác
cạnh ylower yupper xlower k
a 1 7 1 1/6
b 7 9 2 1
d 5 9 9 -3/4
e 1 5 9 0
g 1 5 7 -1/2
Trang 39
h 1 5 4 1/4
Thông tin các cạnh đa giác
cạnh ylower yupper xlower k
a 1 6 1 1/6
b 7 9 2 1
d 5 9 9 -3/4
e 1 4 9 0
g 1 5 7 -1/2
Trang 40
h 1 5 4 1/4
Phương trình đoạn thẳng
F(x, y) = (Y2 – Y1)(x – X1) – (X2 – X1)(y – Y1)
(X2,Y2)
Trang 41
(X1,Y1)
Xác định bên trong tam giác như thế nào ? 
(X3,Y3)
Trang 42
(X1,Y1)
(X2,Y2)
Chiều các đỉnh của tam giác
Tính diện tích tam giác
(X2,Y2) (X2,Y2)
( ) ( ) ( )
2
yyxyyxyyx
S 213132321
−+−+−
=
Trang 43
S>0 S<0(X1,Y1)
(X3,Y3)
(X1,Y1)
(X3,Y3)
Thuật toán
1. Tìm xmin, xmax, ymin, ymax
2. Lặp y : ymin … ymax, x : xmin … xmax
Nếu (x, y) nằm bên trong tam giác thì
Tô (x, y)
y
Trang 44xmin xmax
ymin
max

File đính kèm:

  • pdfĐồ họa Raster - Các thuật toán vẽ đường thẳng (Phần 4).pdf