Algorytmy geometryczne
Arkadiusz Beer
Zastosowanie
• Grafika komputerowa (wizualizacja obiektów na
płaszczyźnie)
• Kompresja rysunków
• Wyznaczanie obszarów na mapie
• Robotyka
• Systemy wsparcia projektowania
• Wzornictwo materiałów
• Leśnictwo
• Statystyka
Oznaczenia
Punkty: p,q,r,s,a,d
Współrzędne punktu p: (x,y)
Inny zapis dla punktu p:
(X(p), Y(p))
X: p -> p.x
Y: p -> p.y
Oznaczenia
Prosta zawierająca punkty p i q: pq
Odcinek o początku w punkcie p i końcu w
punkcie q: p-q
Wektor o początku w punkcie p i końcu w
punkcie q: p->q
Położenie punktu
Po której stronie odcinka p-q leży punkt r?
Punkt r leży po lewej stronie
odcinka p-q
Punkt r leży po prawej stronie
odcinka p-q
Położenie punktu
Po której stronie odcinka p-q leży punkt r?
Punkty p,q,r są współliniowe
Wyznacznik 3 punktów
det 𝑝, 𝑞, 𝑟 =
𝑋(𝑝) 𝑌(𝑝) 1
𝑋(𝑞) 𝑌(𝑞) 1
𝑋(𝑟) 𝑌(𝑟) 1
det 𝑝, 𝑞, 𝑟
> 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒍𝒆𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒
𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞
< 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒑𝒓𝒂𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒
𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞
= 0 𝑝𝑢𝑛𝑘𝑡𝑦 𝑝, 𝑞, 𝑟 𝑠ą 𝒘𝒔𝒑ół𝒍𝒊𝒏𝒊𝒐𝒘𝒆
Wyznacznik 3 punktów
det 𝑝, 𝑞, 𝑟 =
𝑋(𝑝) 𝑌(𝑝) 1
𝑋(𝑞) 𝑌(𝑞) 1
𝑋(𝑟) 𝑌(𝑟) 1
det 𝑝, 𝑞, 𝑟
> 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒍𝒆𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒
𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞
< 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒑𝒓𝒂𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒
𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞
= 0 𝑝𝑢𝑛𝑘𝑡𝑦 𝑝, 𝑞, 𝑟 𝑠ą 𝒘𝒔𝒑ół𝒍𝒊𝒏𝒊𝒐𝒘𝒆
Wyznacznik 3 punktów
Kąt ϕ jest kątem nachylenia wektora p->r do p->q
Jeżeli det 𝑝, 𝑞, 𝑟
> 0 𝑡𝑜 sin 𝜑 > 0
< 0 𝑡𝑜 sin 𝜑 < 0
= 0 𝑡𝑜 sin 𝜑 = 0
Przynależność punktu do odcinka
min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑟 ≤ max 𝑋 𝑝 , 𝑋 𝑞
min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑟 ≤ max 𝑌 𝑝 , 𝑌 𝑞
det 𝑝, 𝑞, 𝑟 = 0
Czy 2 punkty leżą po tej samej stronie?
Czy punkty a i d są po tej samej stronie prostej pq?
Czy 2 punkty leżą po tej samej stronie?
Funkcja znaku
sign(x)=
1 𝑔𝑑𝑦 𝑥 > 0
0 𝑔𝑑𝑦 𝑥 = 0
−1 𝑔𝑑𝑦 𝑥 < 0
Czy 2 punkty leżą po tej samej stronie?
𝑠𝑖𝑔𝑛 det 𝑝, 𝑞, 𝑎 = 𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑑 )
Przecięcie 2 odcinków
Przecięcie 2 odcinków
𝑠𝑖𝑔𝑛(det 𝑎, 𝑑, 𝑝 ) ≠ 𝑠𝑖𝑔𝑛(det 𝑎, 𝑑, 𝑞 )
∧
𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑎 ) ≠ 𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑑 )
Przecięcie 2 odcinków
Przecięcie 2 odcinków
min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑑 ≤ max 𝑋 𝑝 , 𝑋 𝑞
min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑑 ≤ max 𝑌 𝑝 , 𝑌 𝑞
det 𝑝, 𝑞, 𝑑 = 0
Przecięcie 2 odcinków
min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑑 ≤ max 𝑋 𝑝 , 𝑋 𝑞
min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑑 ≤ max 𝑌 𝑝 , 𝑌 𝑞
det 𝑝, 𝑞, 𝑑 = 0
min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑎 ≤ max 𝑋 𝑝 , 𝑋 𝑞
min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑎 ≤ max 𝑌 𝑝 , 𝑌 𝑞
det 𝑝, 𝑞, 𝑎 = 0
∨
min 𝑋 𝑎 , 𝑋 𝑑 ≤ 𝑋 𝑝 ≤ max 𝑋 𝑎 , 𝑋 𝑑
det 𝑎, 𝑑, 𝑝 = 0
min 𝑌 𝑎 , 𝑌 𝑑 ≤ 𝑌 𝑝 ≤ max 𝑌 𝑎 , 𝑌 𝑑
∨
min 𝑋 𝑎 , 𝑋 𝑑 ≤ 𝑋 𝑞 ≤ max 𝑋 𝑎 , 𝑋 𝑑
det 𝑎, 𝑑, 𝑞 = 0
min 𝑌 𝑎 , 𝑌 𝑑 ≤ 𝑌 𝑞 ≤ max 𝑌 𝑎 , 𝑌 𝑑
∨
Przynależność punktu do wielokąta
𝑊𝑖𝑒𝑙𝑜𝑘ą𝑡 𝑊 𝑜 𝑁 𝑤𝑖𝑒𝑟𝑧𝑐ℎ𝑜ł𝑘𝑎𝑐ℎ
𝐶𝑧𝑦 𝑝 ∈ 𝑊 ?
Przynależność punktu do wielokąta
𝑝 ∈ 𝑊 ⇔ nieparzysta liczba przecięć prostej z punktu p
Ponieważ koszt obliczeń jest związany z N bokami i wierzchołkami
to złożoność wynosi O(n)
Przynależność punktu do wielokąta
2 przypadki szczególne:
• Półprosta z punktu p zawiera bok wielokąta
• Półprosta z punktu p przechodzi przez wierzchołek wielokąta
Przynależność punktu do wielokąta
Niech boki a3a4 oraz a5a6 będą bokami sąsiadującymi z a4a5, a punkty a3 i a5 będą
ich końcami.
JEŻELI punkty a3 i a6 leżą po tej samej stronie prostej z punktu p
TO liczba przecięć z bokami a3a4, a4a5 oraz a5a6 wynosi 0
WPP wynosi 1
Przynależność punktu do wielokąta
Niech wierzchołek a2 należał do prostej z punktu p oraz boki a3a4 i a5a6 będą bokami
sąsiadującymi z wierzchołkiem a2, a punkty a1 i a2 będą ich końcami tych boków.
JEŻELI punkty a1 i a3 leżą po tej samej stronie prostej z punktu p
TO liczba przecięć z bokami a1a2 oraz a2a3 wynosi 0
WPP wynosi 1
Przynależność punktu do wielokąta
Otoczka wypukła
Najmniejszy zbiór wypukły zawierający 𝑆 =
{𝑝1, 𝑝2,…, 𝑝 𝑛}
Otoczka wypukła zbioru skończonego to
wielokąt wypukły o wierzchołkach
𝑊 = {𝑝 𝑜1, 𝑝 𝑜2,…, 𝑝 𝑜𝑤}
gdzie 𝑝 𝑜𝑖 ∈ 𝑆
dla każdego 𝑖 = 1,2, . . , 𝑤
Otoczka wypukła
Algorytm naiwny
Punkt p nie należy do otoczki jeżeli leży wewnątrz trójkąta.
Koszt sprawdzania dla N wierzchołków wyniesie
𝑁
3
, 𝑐𝑧𝑦𝑙𝑖 𝑧ł𝑜ż𝑜𝑛𝑜ść 𝑟ó𝑤𝑛𝑎 𝑂(𝑛4)
Sortowanie zbioru punktów
Według niemalejącej wartości kąta nachylenia
do osi OX
Sortowanie zbioru punktów
Centroid zbioru punktów jest punktem o
współrzędnych:
𝑖=1
𝑛
𝑋(𝑝𝑖)
𝑛
𝑖=1
𝑛
𝑌(𝑝𝑖)
𝑛
Sortowanie zbioru punktów
Wyznaczanie wartości kąta tworzonego między badanym punktem, a osią
OX nazywamy funkcję alfa
𝑎𝑙𝑓𝑎 𝑝 =
𝑌(𝑝)
𝑑(𝑝)
𝑔𝑑𝑦 𝑋 𝑝 > 0 ∧ 𝑌 𝑝 ≥ 0
2 −
𝑌 𝑝
𝑑 𝑝
𝑔𝑑𝑦 𝑋 𝑝 ≤ 0 ∧ 𝑌 𝑝 > 0
2 +
𝑌(𝑝)
𝑑(𝑝)
𝑔𝑑𝑦 𝑋 𝑝 < 0 ∧ 𝑌 𝑝 ≤ 0
4 −
𝑌 𝑝
𝑑 𝑝
𝑔𝑑𝑦 𝑋 𝑝 ≥ 0 ∧ 𝑌 𝑝 < 0
gdzie 𝑑 𝑝 = 𝑋(𝑝) + 𝑌(𝑝)
Sortowanie zbioru punktów
1. Wyznacz wartości funkcji alfa dla każdego
punktu O(n)
2. Posortuj wartości funkcji alfa w kolejności
niemalejącej O(n logn)
Algorytm Grahama
Algorytm Grahama
Każdy punkty nie będący wierzchołkiem
otoczki wypukłej musi należeć do
wnętrza trójkąta o wierzchołkach O oraz
2 kolejne wierzchołki otoczki
Algorytm Grahama
Punkt p6 leży we wnętrzu trójkąta O p1 p3
Punkt p4 leży na boku trójkąta O p7 p1
Algorytm Grahama
1. Ustawiamy środowisko
a) Wybieramy punkty O, który jest centroidem i
określamy go jako środek układu współrzędnego
b) Wyznaczmy współrzędne punktów w nowym
układzie współrzędnych
2. Sortujemy punkty wg. wartości kąta nachylenia
wektora O-> p do osi OX, wartość funkcji alfa(p)
3. Wyznaczamy punkt S jako punkt o najmniejszej
współrzędnej y (oraz o najmniejszej
współrzędnej x)
Algorytm Grahama
4. Iterujemy po wszystkich punktach zaczynając
od punktu s
a) Sprawdzamy trzy kolejne punkty 𝑝𝑖−1, 𝑝𝑖 i 𝑝𝑖+1
b) Jeżeli punkt 𝑝𝑖 leży wewnątrz trójkąta
O 𝑝𝑖−1 𝑝𝑖+1 to punkt 𝑝𝑖 zostaje usunięty z otoczki
c) Badamy kolejna trójkę punktów 𝑝𝑖, 𝑝𝑖+1 i 𝑝𝑖+2
5. Iteracje kończymy po osiągnięcia punktu s
Algorytm Grahama
Algorytm Jarvisa
Algorytm Jarvisa
1. Wyznaczamy punkty pomocnicze
a) Punkt d jako punkt o najmniejszej współrzędnej x
spośród wszystkich punktów o najmniejszej
współrzędnej y
b) Punkt g jako punkt o największej współrzędnej x
spośród wszystkich punktów o największej
współrzędnej y
c) Punkty d i g przypisujemy do zbioru
wierzchołków otoczki wypukłej
Algorytm Jarvisa
2. Inicjalizujemy badany punkt p współrzędnymi
punktu d
3. Sprawdzamy czy punkt p nie jest punktem g
a) Wyznaczamy środek układu współrzędnych w
punkcie p
b) Szukamy punktu r o największej odległości od punktu
p śród punktów o najmniejszym kącie nachylenia
wektora wodzącego do osi pX
c) Punkt r przypisujemy do zbioru wierzchołków otoczki
wypukłej
d) Przypisując punktowi p punkt r oraz powtarzamy
krok nr 3
Algorytm Jarvisa
4. Wykonujemy kroki 2-3 przyjmując za punkt
startowy punkt g, a punkt końcowy punkt d
Algorytm Jarvisa
Najdalsza para punktów
1. Wyznaczamy otoczkę wypukłą
dla punktów O(n log n)
2. Dla każdego boku (pq) otoczki
wyznaczamy przeciwległy
punkt (r) należący do otoczki i
wyliczamy odległość punktów
początkowego i końcowego
tego boku z przeciwległym
punktem O(n)
Dziękuję
Arkadiusz Beer

Algorytmy geometryczne

  • 1.
  • 2.
    Zastosowanie • Grafika komputerowa(wizualizacja obiektów na płaszczyźnie) • Kompresja rysunków • Wyznaczanie obszarów na mapie • Robotyka • Systemy wsparcia projektowania • Wzornictwo materiałów • Leśnictwo • Statystyka
  • 3.
    Oznaczenia Punkty: p,q,r,s,a,d Współrzędne punktup: (x,y) Inny zapis dla punktu p: (X(p), Y(p)) X: p -> p.x Y: p -> p.y
  • 4.
    Oznaczenia Prosta zawierająca punktyp i q: pq Odcinek o początku w punkcie p i końcu w punkcie q: p-q Wektor o początku w punkcie p i końcu w punkcie q: p->q
  • 5.
    Położenie punktu Po którejstronie odcinka p-q leży punkt r? Punkt r leży po lewej stronie odcinka p-q Punkt r leży po prawej stronie odcinka p-q
  • 6.
    Położenie punktu Po którejstronie odcinka p-q leży punkt r? Punkty p,q,r są współliniowe
  • 7.
    Wyznacznik 3 punktów det𝑝, 𝑞, 𝑟 = 𝑋(𝑝) 𝑌(𝑝) 1 𝑋(𝑞) 𝑌(𝑞) 1 𝑋(𝑟) 𝑌(𝑟) 1 det 𝑝, 𝑞, 𝑟 > 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒍𝒆𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒 𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞 < 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒑𝒓𝒂𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒 𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞 = 0 𝑝𝑢𝑛𝑘𝑡𝑦 𝑝, 𝑞, 𝑟 𝑠ą 𝒘𝒔𝒑ół𝒍𝒊𝒏𝒊𝒐𝒘𝒆
  • 8.
    Wyznacznik 3 punktów det𝑝, 𝑞, 𝑟 = 𝑋(𝑝) 𝑌(𝑝) 1 𝑋(𝑞) 𝑌(𝑞) 1 𝑋(𝑟) 𝑌(𝑟) 1 det 𝑝, 𝑞, 𝑟 > 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒍𝒆𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒 𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞 < 0 𝑝𝑢𝑛𝑘𝑡 𝑟 𝑙𝑒ż𝑦 𝑝𝑜 𝒑𝒓𝒂𝒘𝒆𝒋 𝑠𝑡𝑟𝑜𝑛𝑖𝑒 𝑝𝑟𝑜𝑠𝑡𝑒𝑗 𝑝𝑞 = 0 𝑝𝑢𝑛𝑘𝑡𝑦 𝑝, 𝑞, 𝑟 𝑠ą 𝒘𝒔𝒑ół𝒍𝒊𝒏𝒊𝒐𝒘𝒆
  • 9.
    Wyznacznik 3 punktów Kątϕ jest kątem nachylenia wektora p->r do p->q Jeżeli det 𝑝, 𝑞, 𝑟 > 0 𝑡𝑜 sin 𝜑 > 0 < 0 𝑡𝑜 sin 𝜑 < 0 = 0 𝑡𝑜 sin 𝜑 = 0
  • 10.
    Przynależność punktu doodcinka min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑟 ≤ max 𝑋 𝑝 , 𝑋 𝑞 min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑟 ≤ max 𝑌 𝑝 , 𝑌 𝑞 det 𝑝, 𝑞, 𝑟 = 0
  • 11.
    Czy 2 punktyleżą po tej samej stronie? Czy punkty a i d są po tej samej stronie prostej pq?
  • 12.
    Czy 2 punktyleżą po tej samej stronie? Funkcja znaku sign(x)= 1 𝑔𝑑𝑦 𝑥 > 0 0 𝑔𝑑𝑦 𝑥 = 0 −1 𝑔𝑑𝑦 𝑥 < 0
  • 13.
    Czy 2 punktyleżą po tej samej stronie? 𝑠𝑖𝑔𝑛 det 𝑝, 𝑞, 𝑎 = 𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑑 )
  • 14.
  • 15.
    Przecięcie 2 odcinków 𝑠𝑖𝑔𝑛(det𝑎, 𝑑, 𝑝 ) ≠ 𝑠𝑖𝑔𝑛(det 𝑎, 𝑑, 𝑞 ) ∧ 𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑎 ) ≠ 𝑠𝑖𝑔𝑛(det 𝑝, 𝑞, 𝑑 )
  • 16.
  • 17.
    Przecięcie 2 odcinków min𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑑 ≤ max 𝑋 𝑝 , 𝑋 𝑞 min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑑 ≤ max 𝑌 𝑝 , 𝑌 𝑞 det 𝑝, 𝑞, 𝑑 = 0
  • 18.
    Przecięcie 2 odcinków min𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑑 ≤ max 𝑋 𝑝 , 𝑋 𝑞 min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑑 ≤ max 𝑌 𝑝 , 𝑌 𝑞 det 𝑝, 𝑞, 𝑑 = 0 min 𝑋 𝑝 , 𝑋 𝑞 ≤ 𝑋 𝑎 ≤ max 𝑋 𝑝 , 𝑋 𝑞 min 𝑌 𝑝 , 𝑌 𝑞 ≤ 𝑌 𝑎 ≤ max 𝑌 𝑝 , 𝑌 𝑞 det 𝑝, 𝑞, 𝑎 = 0 ∨ min 𝑋 𝑎 , 𝑋 𝑑 ≤ 𝑋 𝑝 ≤ max 𝑋 𝑎 , 𝑋 𝑑 det 𝑎, 𝑑, 𝑝 = 0 min 𝑌 𝑎 , 𝑌 𝑑 ≤ 𝑌 𝑝 ≤ max 𝑌 𝑎 , 𝑌 𝑑 ∨ min 𝑋 𝑎 , 𝑋 𝑑 ≤ 𝑋 𝑞 ≤ max 𝑋 𝑎 , 𝑋 𝑑 det 𝑎, 𝑑, 𝑞 = 0 min 𝑌 𝑎 , 𝑌 𝑑 ≤ 𝑌 𝑞 ≤ max 𝑌 𝑎 , 𝑌 𝑑 ∨
  • 19.
    Przynależność punktu dowielokąta 𝑊𝑖𝑒𝑙𝑜𝑘ą𝑡 𝑊 𝑜 𝑁 𝑤𝑖𝑒𝑟𝑧𝑐ℎ𝑜ł𝑘𝑎𝑐ℎ 𝐶𝑧𝑦 𝑝 ∈ 𝑊 ?
  • 20.
    Przynależność punktu dowielokąta 𝑝 ∈ 𝑊 ⇔ nieparzysta liczba przecięć prostej z punktu p Ponieważ koszt obliczeń jest związany z N bokami i wierzchołkami to złożoność wynosi O(n)
  • 21.
    Przynależność punktu dowielokąta 2 przypadki szczególne: • Półprosta z punktu p zawiera bok wielokąta • Półprosta z punktu p przechodzi przez wierzchołek wielokąta
  • 22.
    Przynależność punktu dowielokąta Niech boki a3a4 oraz a5a6 będą bokami sąsiadującymi z a4a5, a punkty a3 i a5 będą ich końcami. JEŻELI punkty a3 i a6 leżą po tej samej stronie prostej z punktu p TO liczba przecięć z bokami a3a4, a4a5 oraz a5a6 wynosi 0 WPP wynosi 1
  • 23.
    Przynależność punktu dowielokąta Niech wierzchołek a2 należał do prostej z punktu p oraz boki a3a4 i a5a6 będą bokami sąsiadującymi z wierzchołkiem a2, a punkty a1 i a2 będą ich końcami tych boków. JEŻELI punkty a1 i a3 leżą po tej samej stronie prostej z punktu p TO liczba przecięć z bokami a1a2 oraz a2a3 wynosi 0 WPP wynosi 1
  • 24.
  • 25.
    Otoczka wypukła Najmniejszy zbiórwypukły zawierający 𝑆 = {𝑝1, 𝑝2,…, 𝑝 𝑛} Otoczka wypukła zbioru skończonego to wielokąt wypukły o wierzchołkach 𝑊 = {𝑝 𝑜1, 𝑝 𝑜2,…, 𝑝 𝑜𝑤} gdzie 𝑝 𝑜𝑖 ∈ 𝑆 dla każdego 𝑖 = 1,2, . . , 𝑤
  • 26.
  • 27.
    Algorytm naiwny Punkt pnie należy do otoczki jeżeli leży wewnątrz trójkąta. Koszt sprawdzania dla N wierzchołków wyniesie 𝑁 3 , 𝑐𝑧𝑦𝑙𝑖 𝑧ł𝑜ż𝑜𝑛𝑜ść 𝑟ó𝑤𝑛𝑎 𝑂(𝑛4)
  • 28.
    Sortowanie zbioru punktów Wedługniemalejącej wartości kąta nachylenia do osi OX
  • 29.
    Sortowanie zbioru punktów Centroidzbioru punktów jest punktem o współrzędnych: 𝑖=1 𝑛 𝑋(𝑝𝑖) 𝑛 𝑖=1 𝑛 𝑌(𝑝𝑖) 𝑛
  • 30.
    Sortowanie zbioru punktów Wyznaczaniewartości kąta tworzonego między badanym punktem, a osią OX nazywamy funkcję alfa 𝑎𝑙𝑓𝑎 𝑝 = 𝑌(𝑝) 𝑑(𝑝) 𝑔𝑑𝑦 𝑋 𝑝 > 0 ∧ 𝑌 𝑝 ≥ 0 2 − 𝑌 𝑝 𝑑 𝑝 𝑔𝑑𝑦 𝑋 𝑝 ≤ 0 ∧ 𝑌 𝑝 > 0 2 + 𝑌(𝑝) 𝑑(𝑝) 𝑔𝑑𝑦 𝑋 𝑝 < 0 ∧ 𝑌 𝑝 ≤ 0 4 − 𝑌 𝑝 𝑑 𝑝 𝑔𝑑𝑦 𝑋 𝑝 ≥ 0 ∧ 𝑌 𝑝 < 0 gdzie 𝑑 𝑝 = 𝑋(𝑝) + 𝑌(𝑝)
  • 31.
    Sortowanie zbioru punktów 1.Wyznacz wartości funkcji alfa dla każdego punktu O(n) 2. Posortuj wartości funkcji alfa w kolejności niemalejącej O(n logn)
  • 32.
  • 33.
    Algorytm Grahama Każdy punktynie będący wierzchołkiem otoczki wypukłej musi należeć do wnętrza trójkąta o wierzchołkach O oraz 2 kolejne wierzchołki otoczki
  • 34.
    Algorytm Grahama Punkt p6leży we wnętrzu trójkąta O p1 p3 Punkt p4 leży na boku trójkąta O p7 p1
  • 35.
    Algorytm Grahama 1. Ustawiamyśrodowisko a) Wybieramy punkty O, który jest centroidem i określamy go jako środek układu współrzędnego b) Wyznaczmy współrzędne punktów w nowym układzie współrzędnych 2. Sortujemy punkty wg. wartości kąta nachylenia wektora O-> p do osi OX, wartość funkcji alfa(p) 3. Wyznaczamy punkt S jako punkt o najmniejszej współrzędnej y (oraz o najmniejszej współrzędnej x)
  • 36.
    Algorytm Grahama 4. Iterujemypo wszystkich punktach zaczynając od punktu s a) Sprawdzamy trzy kolejne punkty 𝑝𝑖−1, 𝑝𝑖 i 𝑝𝑖+1 b) Jeżeli punkt 𝑝𝑖 leży wewnątrz trójkąta O 𝑝𝑖−1 𝑝𝑖+1 to punkt 𝑝𝑖 zostaje usunięty z otoczki c) Badamy kolejna trójkę punktów 𝑝𝑖, 𝑝𝑖+1 i 𝑝𝑖+2 5. Iteracje kończymy po osiągnięcia punktu s
  • 37.
  • 38.
  • 39.
    Algorytm Jarvisa 1. Wyznaczamypunkty pomocnicze a) Punkt d jako punkt o najmniejszej współrzędnej x spośród wszystkich punktów o najmniejszej współrzędnej y b) Punkt g jako punkt o największej współrzędnej x spośród wszystkich punktów o największej współrzędnej y c) Punkty d i g przypisujemy do zbioru wierzchołków otoczki wypukłej
  • 40.
    Algorytm Jarvisa 2. Inicjalizujemybadany punkt p współrzędnymi punktu d 3. Sprawdzamy czy punkt p nie jest punktem g a) Wyznaczamy środek układu współrzędnych w punkcie p b) Szukamy punktu r o największej odległości od punktu p śród punktów o najmniejszym kącie nachylenia wektora wodzącego do osi pX c) Punkt r przypisujemy do zbioru wierzchołków otoczki wypukłej d) Przypisując punktowi p punkt r oraz powtarzamy krok nr 3
  • 41.
    Algorytm Jarvisa 4. Wykonujemykroki 2-3 przyjmując za punkt startowy punkt g, a punkt końcowy punkt d
  • 42.
  • 43.
    Najdalsza para punktów 1.Wyznaczamy otoczkę wypukłą dla punktów O(n log n) 2. Dla każdego boku (pq) otoczki wyznaczamy przeciwległy punkt (r) należący do otoczki i wyliczamy odległość punktów początkowego i końcowego tego boku z przeciwległym punktem O(n)
  • 44.