You are on page 1of 3

Położenie punktu względem figur

geometrycznych

Wiele zagadnień geometrii wymaga sprawdzenia jak dany punkt jest położony względem ustalonej
figury geometrycznej np. wielokąta lub okręgu. Poniżej zostaną przedstawione algorytmy pozwala-
jące na dokonanie takiego sprawdzenia.
Będziemy zakładać, że punkty są reprezentowane przez pary liczb całkowitych (o ile nie zostanie
powiedziane inaczej) (x, y). Założenie takie jest możliwe do realizacji przez wybór odpowiedniego
skalowania. Okręgi lub koła są reprezentowane przez pary (S, r), gdzie punkt S jest środkiem okręgu
(koła), a liczba R > 0 jest jego promieniem. Wielokąty są reprezentowane przez listę kolejnych
wierzchołków (czyli punktów) leżących na obwodzie wielokąta.

1 Położenie punktu względem prostokąta


Najprostszym przypadkiem jest sprawdzenie, czy dany punkt A = (x, y) leży we wnętrzu pro-
stokąta P o bokach równoległych do osi układu współrzędnych. Prostokąt P jest reprezentowany
przez współrzędne dwóch przeciwległych jego wierzchołków: lewego dolnegoB = (xB , yB ) i prawego
górnego D = (xD , yD ). Dla takiej reprezentacji prostokąta P zachodzą nierówności xB < xD oraz
yB < yD .
Na poniższym rysunku punkt F leży we wnętrzu prostokąta, punkt G leży na zewnątrz prosto-
kąta, a punkt H leży na jego brzegu.

1
CMI Geometria obliczeniowa Położenie punktu

Łatwo jest zauważyć, że dla punktu F zachodzą dwie równości:

xB < xF < xD i yB < yF < yD ,

a punkty F i H spełniają jednocześnie dwia warunki:

xB ¬ xU ¬ xD i yB ¬ yU ¬ yD ,

gdzie U oznacza punkt F lub H. Współrzędne punktu leżącego na zewnątrz prostokąta nie spełniają
przynajmiej jednej z tych nierówności.
Oczywiście, jeżeli przeciwległe wierzchołki prostokąta są przechowywane są przechowywane
jako pary liczb (x1 , y1 ), (x2 , y2 ) pojęcia: „lewy dolny wierzchołek” i „prawy górny wierzchołek” nie
mają sensu. Dlatego kryterium należenia punktu (x, y) do wnętrza prostokąta wyznaczonego przez
punkty (x1 , y1 ), (x2 , y2 ) przybiera postać:

min(x1 , x2 ) < x < max(x1 , x2 ) i min(y1 , y2 ) < y < max(y1 , y2 ),

zaś kryterium leżenia punktu we wnętrzu lub na brzegu prostokąta ma postać:

min(x1 , x2 ) ¬ x ¬ max(x1 , x2 ) i min(y1 , y2 ) ¬ y ¬ max(y1 , y2 ).

2 Położenie punktu względem koła


Z faktów znanych z geometrii szkolnej wynika, że punkt A leży wewnątrz koła o środku S i pro-
mieniu r > 0, jeżeli |AS| < r, zaś należy do tego koła (tzn. leży we wnętrzu lub na brzegu koła),
jeżeli |AS| ¬ r. Uwaga ta prowadzi do sformułowania następujących kryteriów:
Punkt (x, y) należy do wnętrza koła o środku S = (x0 , y0 ), jeżeli

(x − x0 )2 + (y − y0 )2 + ε < r2 ,

oraz punkt (x, y) należy do koła o środku S = (x0 , y0 ), jeżeli

(x − x0 )2 + (y − y0 )2 − ε < r2 .

Dodanie/odjęcie małej liczby ε > 0 jest umotywowane potrzebą zniwelowania błędów zaokrą-
gleń powstających w trakcie obliczeń. Rozsądnym wyborem wartości tej liczby jest przyjecie, że
varepsilon = 10−9 .

3 Położenie punktu względem wielokąta


Zajmiemy się teraz sprawdzeniem położenia punktu A = (x, y) o współrzędnych całkowitych
względem wielokąta reprezentowanego przez listę (P1 , P2 , . . . , Pn ) kolejnych jego wierzchołków
Pi = (xi , yi ) o współrzędnych całkowitych.
Kluczowa jest obserwacja, że jeżeli punkt A należy do wielokąta, to dowolna półprosta, która
wychodzi z punktu A i nie przechodzi przez żaden wierzchołek wielokąta, przecina obwód wielokąta
nieparzystą liczbę razy. Natomiast jeżeli punkt A leży na zewnątrz wielokąta, to taka półprosta
ma parzystą liczbę przecięć z obwodem wielokąta; oczywiście 0 też jest liczbą parzystą.
Na poniższym rysunku półprosta o początku A przecina obwód wielokąta w siedmiu punktach,
a więc punkt A leży w wielokącie, a półprosta o początku B ma dwa punkty wspólne z obwodem
wielokąta, czyli punkt B leży na zewnątrz.

2
CMI Geometria obliczeniowa Położenie punktu

W przypadku, gdy wszystkie wierzchołki wielokąta oraz badany punkt A = (x, y) mają współ-
rzędne całkowite możemy wybrać półprostą o początku w punkcie A, która przechodzi przez punkt
B = (x∞ , y + 1), gdzie liczba x∞ jest większa od odciętej każdego wierzchołka wielokąta; moż-
na przyjąć np. x∞ = max(x1 , x2 , . . . , xn ) + 1. Tak wybrana półprosta nie przechodzi przez żaden
wierzchołek wielokąta, bo na jej segmencie pomiędzy punktamii A i B nie ma punktu, który miałby
obie współrzędne całkowite. Ponadto badanie, czy bok Pi Pi+1 wielokąta przecina się z wybraną
półprostą sprowadza się do sprawdzenia, czy przecinają się odcinki Pi Pi+1 i AB.
Procedura sprawdzająca, czy punkt A leży w danym wielokącie, składa się z trzech kroków:

a) należy wyznaczyć półprostą k z punktu A, która nie przechodzi przez żaden z wierzchołków
wielokąta,

b) należy znaleźć liczbę N punktów przecięcia półprostej k z obwodem wielokąta,

c) jeżeli liczba N jest nieparzysta, to punkt A leży w wielokącie, a jeżeli liczba N jest parzysta,
to punkt A leży na zewnątrz wielokąta.

Powyższa procedura traktuje punkty położone na brzegu wielokąta jako punkty należące do tego
wielokąta.
Obliczanie liczby N na ogół nie wymaga przeglądania wszystkich boków wielokąta i sprawdza-
nia, czy te boki przecinają się z odcinkiem AB. Przed uruchomieniem procedury należy sprawdzić,
czy istnieje wierzchołek wielokąta o odciętej większej lub równej x, a następnie trzeba odrzucić
wszystkie boki, których oba końce mają odcięte mniejsze od x oraz wszystkie boki, których oba
końce mają rzędne mniejsze od y lub większe od y + 1. Opisaną wyżej procedurę stosujemy do
wszystkich nie odrzuconych boków.

You might also like