III. CÁC THUẬT TOÁN KIỂM TRA SỰ TƯƠNG QUAN GIỮA CÁC ĐỐI TƯỢNG HÌNH HỌC
6. Tô màu đa giác
Cơ sở toán học:
Phương pháp hiển thị các vùng được tô màu trong đồ họa máy tính là quá trình xác định các pixel tương ứng thuộc vùng tô màu cho nó. Có nhiều thuật toán đã được nghiên cứu và phát triển cho việc hiển thị các vùng được tô màu trên màn hình, một trong những thuật toán đó là tô màu theo vết dầu loang, một thuật toán khác là tô
Luận văn tốt nghiệp
Thiết kế hệ thống kiểm tra cácc quan hệ hình họctrang 34 trang 34
màu theo dòng quét. Ở đây ta dùng phương pháp tô màu theo dòng quét (scan-line algorithm) hay còn gọi là giải thuật tô màu chẵn lẻ (odd - even algorithm).
Thuật giải này sử dụng các giao điểm giữa các đường biên của vùng cần tô với các đường thẳng gọi là dòng quét và xác định các pixel nào nằm trong vùng tô màu giữa hai giao điểm liên tiếp, đó chính là các pixel dọc theo đường quét nằm giữa hai giao điểm và nằm bên trong đa giác.
Ở mỗi điểm giao dòng quét chuyển đổi hoặc đi vào hoặc đi ra khỏi đa giác, đó là sự thay đổi parity của điểm đó. Nếu dòng quét đi vào trong đa giác những pixels tiếp theo sẽ được tô, nếu đi ra ngoài những pixels tiếp theo sẽ không được tô.
Khi dòng quét đi qua một đỉnh P của đa giác (chính là giao điểm của 2 cạnh của đa giác) nó tạo ra 2 giao điểm, mỗi điểm với 1 cạnh của đa giác đi qua đỉnh đó, nếu đỉnh ở giá trị cực (local extremum) Pixels ở bên trái và bên phải của đỉnh đó sẽ có cùng parity, nhưng nếu đỉnh không ở giá trị cực các Pixels ở bên trái và bên phải của đỉnh đó sẽ có parity ngược nhau, do đó ta cần có một xử lý đặc biệt hơn.
Nếu P là giao điểm của hai cạnh có hướng y ngược nhau (một cạnh có giá trị y tăng,một cạnh có giá trị y giảm - Scan Line 1) thì dòng quét có 2 điểm giao.
Nếu P là giao điểm của hai cạnh có hướng y trùng nhau (hai cạnh đều có giá trị y cùng tăng hay giảm - Scan Line 2) thì dòng quét có 1 điểm giao.
Trước khi tô màu, ta cần kiểm tra mỗi đỉnh đa giác. Nếu y của nó không là giá trị cực trị(local extremum), như trong scan line 2. Vì những Pixels đối với bên trái và phải của đỉnh đó khác parity, khác giá trị kiểm tra inside-outside; ta phải làm ngắn một trong hai cạnh đi một chút (giảm y của đầu cạnh đó một pixel).
Đối với cạnh nằm ngang trong đa giác không cần đưa vào tập các cạnh của đa giác để xử lý. 1 2, 3 1 4 2 Scan Scan
Luận văn tốt nghiệp
Thiết kế hệ thống kiểm tra cácc quan hệ hình họctrang 35 trang 35
Giải thuật:
Bước 1: Xác định Frame “bao” đa giác.
Frame bao đa giác là hình chữ nhật nhỏ nhất chứa toàn bộ đa giác. Để xác định hình chữ nhật này ta lấy min hoặc max các tọa độ đỉnh của đa giác trong hệ tọa độ Descartes rồi tăng, hoặc giảm 1 để đảm bảo hình chữ nhật là hình bao và đa giác hoàn toàn nằm trong nó.
Bước 2: Xác định danh sách các cạnh đa giác để xử lý. Lần lượt duyệt tất cả cạnh của đa giác:
Không đưa cạnh nằm ngang của đa giác vào danh sách.
Kiểm tra 2 cạnh đa giác liên tiếp, nếu đỉnh chung không là điểm cực trị (local extremum), làm ngắn đầu cạnh của một cạnh đi qua đỉnh chung một pixel.
Bước 3: Tiến hành tô màu.
Tiến hành các đường quét ngang tư Ymin + 1 đến Ymax - 1.
Ứng với một đường quét ngang yi nào đó, ta xác định các điểm cắt (bằng giải thuật tìm giao điểm giữa hai đoạn thẳng đã có), giữa các đường quét ngang với tất cả các cạnh của đa giác. Vì tung độ y của điểm cắt bằng yinên ta chỉ cần đưa các hoành độ xi của điểm cắt vào một danh sách.
Sắp xếp lại danh sách sao cho các giá trị xităng dần. Duyệt qua các điểm cắt và đếm số điểm cắt đã duyệt.
Nếu điểm cắt trùng với đỉnh của đa giác: Nếu có một cạnh song song với đường quét thì đỉnh trước đếm tăng và đỉnh sau không đếm tăng.
Tô màu giữa các cặp giao điểm .
Bước 4: Lập lại bước hai cho đến khi yi= ymax.
Bước 5: Vẽ lại đa giác bằng màu đã tô.
Lưu ý: Nếu đa giác không phải là đa giác đơn thì giải thuật này không vận dụng được.