Trang 2Bà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... Các hướng tiếp cậnCó hai phương pháp - Tô màu theo lân cận - Tô màu theo dòng quét... Tra
Trang 1ĐỒ HỌA RASTER
CÁC THUẬT TOÁN TÔ MÀU
Giảng viên : Bùi Tiến Lên
Trang 2Trang 2
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 3Cá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 4Tô màu theo lân cận
Trang 5Lân cận là gì ?
Có hai loại lân cận : lân cận 4 và lân cận 8.
Trang 6Trang 6
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
xy
Trang 7Cà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);
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);
}
}
Trang 8kích thước !
Trang 9Thuậ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
- c 1 Lấy điểm hạt giống
- c 2 Tô điểm hạt giống sau đó tô loang sang trái và
sang phải
- c 3 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
Trang 10Trang 10
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 11Thuật toán cải tiến
Minh họa tô loang
Trang 12Trang 12
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 13Thuật toán cải tiến
Minh họa bổ sung những điểm hạt giống mới
biênhạt giống
Trang 14Trang 14
Tô theo lân cận - Một số vấn đề
Sử dụng lân cận nào ?
Trang 15Tô theo lân cận - Một số vấn đề
Đường biênmàu gì ?
Trang 16Trang 16
Tô theo lân cận - Một số vấn đề
Trang 17Tô màu theo dòng quét
Trang 18Trang 18
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 20bước 2 : Phân trường hợp
Theo tung độ
Trang 21Tô hình tam giác
Trang 22Trang 22
Tô hình tam giác
Tô tam giác (Y1 = Y2 = Y3)
Trang 23Tô hình tam giác
Tô tam giác (Y1 < Y2 = Y3)
1 Tìm hoành độ giao điểm xl, xrgiữa dòng quét y với các cạnh 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.
Trang 248
4 174 264 354 444
Trang 25Tô hình tam giác
1 2
1 2
cu moi
1
YY
X
Xk
với
kx
x
Xlàđầu
x
điểmgiao
độhoànhtính
Trang 27Tô 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.
pn-2
pn-1
p0
Trang 28Trang 28
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 29Thu t toán tô đa giác tổng quát ậ
Thu t toán tô đa giác tổng quát ậ
Trang 30bước 2 Tô từng dòng
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.
Trang 31Lưu ý
Bỏ cạnh nằm ngang
bỏ
bỏ
Trang 32Bình thường
y
Trang 33y
Trang 341
Trang 35{(1, 1) (2, 7) (4, 9) (7, 9) (9, 5) (9, 1) (7, 1) (5, 5) (4, 1)}
Trang 37h
Trang 38k=1/4
Trang 39Thông tin cạnh đa giác
cạnh y lower y upper x lower k
Trang 40Trang 40
Thông tin các cạnh đa giác
cạnh y lower y upper x lower k
Trang 41Phương trình đoạn thẳng
F(x, y) = (Y2 – Y1)(x – X1) – (X2 – X1)(y – Y1)
(X1,Y1)
(X2,Y2)
Trang 42Trang 42
Xác định bên trong tam giác như thế nào ?
(X 1 ,Y 1 )
(X 2 ,Y 2 ) (X 3 ,Y 3 )
Trang 43Chiều các đỉnh của tam giác
Tính diện tích tam giác
xy
yxy
yx
S = 1 2 − 3 + 2 3 − 1 + 3 1 − 2
Trang 44Trang 44
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)
ymin
ymax