11. Előadás - Grafikai algoritmusok

Konvex burok számítása

Tegyük fel, hogy adott \(n\) számú pont egy vektortérben!

A feladat az, hogy meghatározzuk a ponthalmaz adott részhalmazát, amelyek kifeszítik a teljes ponthalmaz konvex burkát.

A problémát megfogalmazhatjuk úgy is, hogy meg szeretnénk határozni azon minimális elemszámú részhalmazt, amelynek a konvex burka megegyezik az eredeti ponthalmazéval.

QuickHull algoritmus

Feltételezzük, hogy síkbeli pontokról van szó. Az algoritmus működése az alábbi formában foglalható össze.

  • Kiválasztunk 2 pontot, amely biztosan a konvex burkon van.

  • Húzunk egy ezeken áthaladó egyenest. A problémát ezzel 2 részre bontottuk.

  • Meghatározzuk az egyenestől legtávolabb eső pontot (a felosztás során kapott ponthalmazon belül). Ez így szükségszerűen a konvex burkon lesz.

  • Ezt a pontot tekintjük a felosztáshoz használt új pontnak.

  • Az új ponttal, és az első lépésben kiválasztott pontokkal rekurzív módon elvégezhetjük a felosztást.

  • A leállási feltételt az adja, hogy a halmazokból a pontok elfogynak.

Figyelem

A pontok megadási sorrendje számít a felosztásnál, mivel az alapján lehet eldönteni, hogy az egyenes melyik oldalára esnek a pontok!

A munka bonyolultsága hasonló a Gyorsrendezéséhez:

  • legrosszabb esetben: \(\mathcal{O}(n^2)\),

  • átlagos esetben: \(\mathcal{O}(n \cdot \log n)\).

\(\rhd\) Hogyan oldható meg a ponthalmaz ábrázolása a hatékony implementációhoz?

Kérdések

  • Definiálja a konvex burok fogalmát!

Feladatok

  • Implementáljuk a QuickHull algoritmust!

  • Készítsen hozzájuk konkrét példákat!