Oto proste rozwiązanie ...
Rozpocznij z dowolnych trzech punktów, tworząc trójkąt. Dodaj każdy dodatkowy punkt do wielokąta, wykonując następującą operację:
Podziel krawędzie na dwie ciągłe ścieżki, gdzie na jednej ścieżce linia każdej krawędzi oddziela punkt, który ma zostać dodany od reszty wielokąta (nazwijmy to "ścieżka oddzielania"), a na drugiej ścieżce linia każdej krawędzi ma punkt po tej samej stronie, co wielokąt.
(Uwaga: tak długo, jak kształt pozostaje wypukły, który musi te dwie ścieżki będą ciągłe i tworzą całą kształt)
Jeżeli oddzielenie ścieżka ma krawędzie, punkt znajduje się wewnątrz wielokąta i należy zignorować, w przeciwnym razie usunąć ścieżkę oddzielającą od wielokąta. Zastąp go dwoma segmentami, łącząc każdy punkt końcowy ścieżki oddzielającej z nowym punktem.
Ta-da! :)
cześć, muszę wdrożyć taką samą funkcjonalność w mojej aplikacji. czy mógłbyś udostępnić mi algorytm? –
Użyłem QuickHull. Odniesienia tutaj: https://en.wikipedia.org/wiki/Quickhull –