Đây là hai thao tác cùng sử dụng một hình chữ nhật làm tham số đầu vào. Chúng được mô tả như sau: Windowing(g, r) là phép toán logic kiểm tra xem
một đối tượng hình học g có giao với một hình chữ nhật r hay không.
Thao tác windowing đối với một điểm là trường hợp tầm thường có thể
giải quyết bằng việc kiểm tra vị trí điểm tương đối của điểm đó với từng cạnh của hình chữ nhật. Đối với polyline và polygon, có thể sử dụng cùng một thuật
toán, vì polygon chính là một polyline đóng.
Thuật toán được thực hiện bởi việc quét lần lượt các cạnh trên polyline và kiểm tra xem chúng có giao với cạnh nào của hình chữ nhật không.
Thuật toán trên không áp dụng cho mọi trường hợp. Đối tượng g có thể
bao phủ hoàn toàn (hoặc bị bao phủ hoàn toàn) bởi hình chữ nhật r. Khi đó,
không có bất cứ cạnh nào của g giao với hình chữ nhật. Vì vậy, việc kiểm tra
không phát hiện được một giao điểm nào. Do vậy phải thực hiện thêm hai phép kiểm tra.
Windowing (l: line, r: retangle): Boolean
begin
for (mỗi cạnh li của l)
for (mỗi cạnh ri của r)
if (li giao ri) return true
end for end for
// kiểm tra điểm bên trong hình chữ nhật
Hình 3.7 Các thao tác windowing: (a) trên một đa giác và (b) trên một polyline
r1
r2
r1’
r2’
p = cạnh bất kỳ của l
if (p nằm trong r) return true // l nằm trong r
else // kiểm tra điểm bên trong polygon p = cạnh bất kỳ của r
if (p nằm trong l) return true // r nằm trong l
else return false
end
Trong trường hợp xấu nhất, mỗi cạnh của l đều được kiểm tra với tất cả
các cạnh của r (4n phép toán, n là số cạnh của l). Mỗi thuật toán kiểm tra điểm
nằm trong hình chữ nhật và điểm nằm trong polygon đều có độ phức tạp là O(n). Vậy độ phức tạp của thuật toán windowing là O(n).