Kiểm tra một điểm p có nằm bên trong một đa giác G hay không? là một
bài toán rất thông dụng trong các ứng dụng không gian.
Có thể mô tả thuật toán một cách đơn giản như sau. Nếu vẽ một nửa đường thẳng (một tia) l bắt đầu từ điểm P và đếm số đoạn thẳng thuộc G cắt l, số này là chẵn thì P nằm bên ngoài G, ngược lại, nếu số này lẻ. Thuật toán được thực hiện bằng cách duyệt lần lượt các cạnh trong G xem chúng cắt tia l hay
không. Độ phức tạp tính toán của nó là O(n).
Trong một số trường hợp, cần đặc biệt chú ý. Ví dụ, điểm P3 trong hình 3.4. Số giao điểm của các cạnh tạo nên G với đường thẳng ngang kẻ qua P3 rất có thể là lẻ và theo thuật toán, P3 nằm trong G. Để giải quyết vấn đề này, có thể áp dụng các quy ước sau:
(1) không đếm các cạnh đồng phẳng với l,
(2) đếm một cạnh e như là một cạnh giao khi và chỉ khi tồn tại ít nhất một điểm cuối của e thực sự nằm phía trên l.
Với các quy ước này, các cạnh a, b, c không được đếm trong trường hợp trên. Lúc đó, số giao điểm thực sự sẽ là 6, như vậy P3 nằm ngoài G. Phương
PointInPolygon(P: polygon, p:point): boolean
BEGIN
If (p thuộc cạnh của P), p nằm trong P
Else
count = 0
l tia song song Ox, đi qua p
for (i = 1 to n) do begin
if(Intersect(edge(i),l) and not Collinear(edge(i),l))
begin
if (một điểm cuối của edge(i) thực sự nằm phía trên l) count = count +1 end end for if (count là lẻ), p nằm trong P P1 P3 . . v b c l a . P2 .
End if
END
Đối với trường hợp tổng quát, đây là bài toán O(n), Nếu G là đa giác lồi,
thì bài toán là O(log(n)).