Professional Documents
Culture Documents
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
CMI Geometria obliczeniowa Położenie punktu
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ć:
(x − x0 )2 + (y − y0 )2 + ε < r2 ,
(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 .
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,
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.