rozwiązanie niezależne od języka:
PODANE: wielokąt może ZAWSZE składać się z n-2 trójkątów, które nie zachodzą na siebie (n = liczba punktów LUB boków). 1 trójkąt = wielokąt trójstronny = 1 trójkąt; 1 kwadrat = wielokąt czteroboczny = 2 trójkąty; etc ad mdłości QED
dlatego też wielokąt można zmniejszyć przez „ucinanie” trójkątów, a całkowita powierzchnia będzie sumą powierzchni tych trójkątów. wypróbuj to za pomocą kartki papieru i nożyczek, najlepiej wizualizować proces przed wykonaniem.
jeśli weźmiesz dowolne 3 kolejne punkty na ścieżce wielokąta i utworzysz trójkąt z tymi punktami, będziesz mieć jeden i tylko jeden z trzech możliwych scenariuszy:
- wynikowy trójkąt jest całkowicie wewnątrz oryginalnego wielokąta
- wynikowy trójkąt jest całkowicie poza oryginalnym wielokątem
- wynikowy trójkąt jest częściowo zawarty w oryginalnym wielokącie
interesują nas tylko przypadki, które mieszczą się w pierwszej opcji (całkowicie zawarte).
za każdym razem, gdy znajdujemy jeden z nich, odcinamy go, obliczamy jego powierzchnię (łatwy peasy, nie wyjaśniam tutaj wzoru) i tworzymy nowy wielokąt z jednym bokiem mniej (odpowiednik wielokąta z odciętym trójkątem). dopóki nie zostanie nam tylko jeden trójkąt.
jak zaimplementować to programowo:
utwórz tablicę (kolejnych) punktów, które reprezentują ścieżkę WOKÓŁ wielokąta. zacznij od punktu 0. uruchom tablicę tworząc trójkąty (po jednym naraz) z punktów x, x + 1 i x + 2. przekształć każdy trójkąt z kształtu w obszar i przetnij go z obszarem utworzonym z wielokąta. JEŻELI wynikowe przecięcie jest identyczne z oryginalnym trójkątem, wówczas wspomniany trójkąt jest całkowicie zawarty w wielokącie i można go odciąć. usuń x + 1 z tablicy i zacznij ponownie od x = 0. w przeciwnym razie (jeśli trójkąt jest na zewnątrz [częściowo lub całkowicie] wielokąta), przejdź do następnego punktu x + 1 w tablicy.
dodatkowo, jeśli chcesz zintegrować się z mapowaniem i zaczynasz od punktów geograficznych, najpierw musisz dokonać konwersji z punktów geograficznych na punkty ekranowe. wymaga to ustalenia modelu i wzoru na kształt ziemi (chociaż myślimy o ziemi jako kuli, w rzeczywistości jest to nieregularny jajo (kształt jajka) z wgnieceniami). istnieje wiele modeli, aby uzyskać więcej informacji na wiki. Ważną kwestią jest to, czy uznasz ten obszar za płaszczyznę, czy za zakrzywiony. Ogólnie rzecz biorąc, „małe” obszary, w których punkty są oddalone od siebie do kilku kilometrów, nie będą generować znaczącego błędu, jeśli uznamy je za płaskie, a nie wypukłe.