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
8. Kiểm tra quan hệ giữa đoạn thẳng và đa giác
Các chương trình ứng dụng mô tả các hình ảnh bằng hệ tọa độ thế giới thực, có thể là bất kỳ hệ tọa độ Descartes nào mà người dùng cảm thấy thuận tiện nhất. Các hình ảnh được mô tả trong hệ tọa độ thực sau đó sẽ được các hệ độ họa ánh xạ vào các hệ tọa độ thiết bị. Thông thường, các hệ đồ họa cho phép người dùng xác định một vùng nào đó của hình ảnh được hiển thị và nó sẽ hiển thị ở đâu trên màn hình (viewport). Ta có thể chọn một vùng hay nhiều vùng để hiển thị, các vùng này có thể đặt ở các nơi khác nhau hay lồng vào nhau trên màn hình. Quá trình này đòi hỏi nhiều thao tác như dịch chuyển, biến đổi tỷ lệ để đưa vào bên trong viewport hoặc đơn giản là loại bỏ các phần hình ảnh nằm ngoài vùng đang được xét. Thao tác cuối cùng và cũng được sử dụng nhiều nhất còn được gọi là clipping. Trong thuật ngữ thông thường Viewport được hiểu như một window (hình chữ nhật) theo đó hình ảnh được clipping. Tuy nhiên Viewport cũng có thể là một đa giác bất kỳ. Bài toán clipping sau đây được xét cho
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 38 trang 38
trường hợp tổng quát hơn: clipping với đa giác đơn bất kì (cho cả hai trường hợp đa giác lồi hoặc lõm).
Cơ sở toán học và giải thuật:
Các bước tiến hành clipping đoạn thẳng AB bằng một đa giác đơn, phẳng bất kì như sau:
Bước 1: Hoán đổi A, B để xA < xB.
Nếu xA = xB . Hoán đổi A,B để yA < yB
Bước 2: Kiểm tra tính trong ngoài của A và B đối với đa giác (Dùng giải thuật kiểm tra điểm bên trong/ngoài đa giác )
Bước 3: Tìm giao điểm của AB với đa giác
(Dùng giải thuật xác định giao điểm của 2 đoạn đã có ) Nếu có giao điểm thì
{
- Đưa các tọa độ của các điểm cắt vào một danh sách - Sắp xếp cho hoành độ các giao điểm tăng dần
(Nếu xA = xB sắp xếp theo tung độ) }
Bước 4: Thực hiện clipping.
- Nếu A và B đều nằm trong đa giác thì (1)
Nếu số điểm cắt = 0, Return (AB nằm hoàn toàn trong đa giác) - Ngược lại
{
. Đoạn thẳng từ A đến điểm cắt thứ 1 thuộc đa giác. . i = 1
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 39 trang 39
. Lặp lại
. Tìm trung điểm của đoạn thẳng nối hai điểm cắt kế tiếp nhau.
. Kiểm tra trong /ngoài đối với trung điểm. . Nếu trung điểm nằm trong đa giác thì
Return (Đoạn thẳng thuộc đa giác)
. Ngược lại, Return (Đoạn thẳng không thuộc đa giác). . Inc (i,1)
Cho đến khi i = số điểm cắt }
- Ngược lại, có điểm A hay B nằm ngoài đa giác (1) - Nếu số điểm cắt = 0, Return (Đoạn AB nằm ngoài đa giác). - Nếu số điểm cắt <> 0 thì
{
. Thêm tọa độ điểm A vào đầu danh sách . Thêm tọa độ điểm B vào cuối danh sách . i = 1
. Lặp lại
. Tìm trung điểm của đoạn thẳng nối hai điểm cắt kế tiếp nhau
. Kiểm tra trong/ ngoài đối với trung điểm. . Nếu trung điểm nằm trong đa giác thì
Return (Đoạn thẳng thuộc đa giác)
. Ngược lại, Return (Đoạn thẳng không thuộc đa giác) . inc (i,1)
Cho đến khi hết danh sách }
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 40 trang 40
- Ngược lại, Return (Đoạn thẳng không thuộc đa giác).
Bước 5:Vẽ lại các đoạn thẳng thuộc đa giác
Mở rộng: Giải thuật có thể được mở rộng cho việc clipping một đa giác bằng cách thực hiện clipping tất cả các cạnh của đa giác.