Bài toán Clipping

Một phần của tài liệu Một số vấn đề cơ sở dữ liệu không gian (Trang 65)

Clipping (g, r) là phép toán tính phần của đối tượng hình học g nằm bên

trong hình chữ nhật r, Một trong số thuật toán hiệu quả được đề xuất năm 1974 [2], với thời gian tuyến tính được mô tả như sau.

Trước tiên, coi mỗi cạnh của hình chữ nhật như một nửa không gian. Cắt đối tượng hình học theo bốn nửa không gian đó. Giả sử rằng, P và hình chữ nhật r được lữu trữ theo thứ tự ngược chiều kim đồng hồ. Giữ lại phần của P nằm

trong nửa mặt phẳng H xác định bởi đường thẳng L chứa các cạnh có hướng ei = pipi+1 của P, kiểm tra vị trí của mỗi cạnh ei với H. Có thể xảy ra bốn trường hợp:

 Cạnh ei nằm ngoài H, điểm pi+1 được loại khỏi danh sách các đỉnh của P,

 Cạnh ei giao L và pi+1 nằm trong P, giữa lại pi+1, bổ sung giao điểm I vào danh sách các cạnh của P.

 Cạnh ei giao L, pi+1 nằm ngoài H, loại pi+1, bổ sung giao điểm I vào danh

sách các cạnh của P.

Thuật toán này gồm hai vòng lặp. Vòng lặp ngoài quét các cạnh của hình chữ nhật. Tại mỗi bước, một cạnh xác định nửa mặt phẳng Hi, i = {1, 2, 3, 4}. Vòng lặp trong quét các cạnh của đơn giản P và cắt chúng theo nửa mặt phẳng Hi. Với mỗi cạnh được quét, một trong số các thao tác đã liệt kê trước đó được thực hiện, một phần đơn giản được cắt, một đoạn trên đường biên Li trở thành một cạnh mới. Đa giác được tiếp tục cắt theo các cạnh còn lại của hình chữ nhật.

Clipping (P: polygon, r: rectangle): polygon

begin

Copy P vào P’

for (mỗi cạnh ri của r)

l = đường thẳng chứa ri

for (mỗi cạnh ei của P’)

if (l giao ei) l = ei l ket_qua  l

end if

if (pi+1 nằm bên trái ri) ket_qua  pi+1

end if end for

Copy ket_qua vào P

end for

end

Trong hình 3.8 là một một ví dụ với kết quả từng bước thực hiện thuật toán áp dụng cho một đa giác.

(1) (2)

(3) (4)

Cũng giống như trong thao tác windowing, thao tác clipping có độ phức tạp là O(n).

Một phần của tài liệu Một số vấn đề cơ sở dữ liệu không gian (Trang 65)

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

(119 trang)