III. CÁC THUẬT TỐ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ở tố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 tố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 tốn đĩ là tơ màu theo vết dầu loang, một thuật tốn khác là tơ 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 ngồ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ý.
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 tồ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 hồn tồ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ả
1 2, 3 1 4 2 Scan line 1 Scan Line 2
các cạnh của đa giác. Vì tung độ y của điểm cắt bằng yi nên ta chỉ cần đưa các hồ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ị xi tă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.