Phương pháp này sẽ xác định phần giao của các dòng quét kế tiếp nhau với đường biên của vùng tô. Sau đó, sẽ tiến hành tô màu các điểm thuộc phần giao này. Phương pháp này thường được dùng để tô màu đa giác lồi , lõm hay đa giác tự cắt, đường tròn, ellipse, và một sốđường cong đơn giản khác.
• Các bước chính của thuật toán
- Tìm ymin, ymax lần lượt là giá trị nhỏ nhất, lớn nhất của tập các tung độ của các đỉnh của đa giác đã cho.
- Ứng với mỗi dòng quét y = k với k thay đổi từ ymin đến ymax, lặp :
. Tìm tất cả các hoành độ giao điểm của dòng quét y = k với các cạnh của đa giác.
. Sắp xếp các hoành độ giao điểm theo thứ tự tăng dần : x0 ,x1 ,..., xn ,...
. Tô màu các đoạn thẳng trên đường thẳng y = k lần lượt được giới hạn bởi các cặp (x0, x1), ( x1 ,x2 ), ....(xem hình 2.6).
Hình 2.6 : Tô đa giác bằng giải thuật scan -line.
• Các vấn đề cần lưu ý:
- Hạn chếđụơc số cạnh cần tìm giao điểm ứng với mỗi dòng quét vì ứng với mỗi dòng quét không phải lúc nào cũng giao điểm với các cạnh của đa giác.
- Xác định nhanh hoàn độ giao điểm vì nếu lặp lại thao tác tìm giao điểm của cạnh đa giác với mỗi dòng quét sẽ tốn rất nhiều thời gian.
- Giải quyết trường hợp số giao điểm đi qua đỉnh đơn điệu thì tính số giao điểm là 1 hay đi qua đỉnh cực trị.thì tính số giao điểm là 0 (hoặc 2).
• Tổ chức cấu trúc dữ liệu và thuật toán
- Danh sách các cạnh (Edge Table - ET) : chứa toàn bộ các cạnh của đa giác (loại các cạnh song song với trục Ox) được sắp theo thứ tự tăng dần của trục y. Xem hình 2.5 ta có thể sắp xếp các cạnh trong ET là : AB, AI, HG, BC, GF, DC, EF (loại IH và DE) - Danh sách các cạnh đang kích họat (Active Edge Table - AET) : chứa các cạnh của đa giác có thể cắt ứng với dòng quét hiện hành, các cạnh này được sắp theo thứ tự tăng dần của hoành độ giao điểm của hoành độ giao điểm giữa cạnh và dòng quét.
- Khi dòng quét đi từ ymin đến ymax, các cạnh thoảđiều kiện sẽđược chuyển từ ET sang AET. Nghĩa là, khi dòng quét y=k bắt đầu cắt một cạnh, khi đó k ≥ ymin, cạnh này sẽđược chuyển từ ET sang AET. Khi dòng quét không còn cắt cạnh này nữa, khi
đó, k > ymax, cạnh này sẽ bị loại khỏi AET. Khi không còn cạnh nào trong ET hay AET thì quá trình tô màu kết thúc ( xem hình 2.5).
B D E F G I H A yH+1 yH ymin C P ymax
Hình 2.7 : Tô đa giác bằng giải thuật scan -line.
- Để tìm giao điểm giữa cạnh đa giác và dòng quét, ta có nhận xét sau :
y = k+1 y = k xk x k+1 x k+1 - x k = m 1 ( (k+1) - k ) = m 1 hay x k+1 = x k + m 1 Trong đó m là hệ số góc của cạnh.
Lưu đồ thuật toán scan - line
Begin
Tạo danh sách tất cả các cạnh (ET) của đa giác.
i < ymax
Tìm hoành độ giao điểm và sắp xếp theo thứ tựtăng dần
End
No Yes
Tô mẫu các đoạn giao được tạo bởi từng cặp hoành độkếtiếp nhau Cập nhật lại thông tin của các cạnh để sử dụng cho dòng quét kếtiếp i = ymin Cập nhật danh sách các cạnh kích họat AET i = i + 1