Kiểm tra quan hệ giữa đoạn thẳng và đa giác

Một phần của tài liệu Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D,3D (Trang 32 - 35)

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

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 ngồ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 tốn clipping sau đây được xét cho 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ở tố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: Hốn đổi A, B để xA < xB.

Nếu xA = xB . Hốn đổi A,B để yA < yB

Bước 2: Kiểm tra tính trong ngồ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/ngồ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 hồ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 hồn tồ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

. 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 /ngồ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 ngồi đa giác (1) - Nếu số điểm cắt = 0, Return (Đoạn AB nằm ngồ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/ ngồ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 }

- 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.

Một phần của tài liệu Thiết kế hệ thống kiểm tra các quan hệ hình học trong không gian 2D,3D (Trang 32 - 35)

Tải bản đầy đủ (DOC)

(69 trang)
w