Przejdź do zawartości

Wikipedysta:Borneq/brudnopis

Z Wikipedii, wolnej encyklopedii
To jest najnowsza wersja artykułu Wikipedysta:Borneq/brudnopis edytowana 17:27, 29 wrz 2022 przez Borneq (dyskusja | edycje).
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Algorytm Weilera–Athertona pozwala przycinać wielokąt, nie tylko do prostokąta ale i do innego wielokąta, przy czym oba wielokąty nie muszą być wypukłe. Poza tym niewielka modyfikacja powoduje że może służyć do znajdowania zamiast części wspólnej, unię wielokątów.

Opis Algorytmu

[edytuj | edytuj kod]

Dwa wielokąty muszą być tak samo zorientowane, zgodnie lub przeciwnie do ruchu wskazówek zegara. Jeśli któryś z wielokątów jest nieodpowiednio zorientowany, należy odwrócić kolejność punktów wielokąta.
Sposób wyznaczania orientacji wielokąta: Wielokąt składa się z odcinków zaczynających się w punkcie a kończący się w punkcie . Oznaczmy przez różnicę a przez różnicę . Wtedy ma znak zależny od orientacji.
Jako przykład mamy dwa przecinające się wielokąty, z których pierwszy nie jest wypukły. W przypadku wyznaczania unii wielokątów należy zacząć od punktu mającego ekstremalną pozycję w którymś z czterech kierunków branego z dwóch wielokątów. Takimi punktami są: P0 - najbardziej u góry, Q0,Q1- po lewo, P2 - u dołu, Q3 - po prawo. P1,P4,P5,Q2 tez byłyby dobre jako startowe, choć nie są ekstremalne. Natomiast nieodpowiednim puntem byłby P3 ponieważ P3,I5,I3 stanową obrys dziury a nie obrys zewnętrzny.

Punkty przecinania się dwóch wielokątów

Zacznijmy od P0. Idziemy do I1, jest to punkt przecięcia, więc zmieniamy wielokąt na Q; idziemy do Q0, Q1, I0, zmieniamy wielokąt, idziemy P1,P2,I2, zmieniamy wielokąt, I4, zmieniamy wielokąt, P4,P5,I6,zmieniamy wielokąt, Q2,Q3,I7, zmieniamy wielokąt i do P0.

Zastały nieodwiedzone P3,I5,I3 - jest to obrys dziury, który może występować, czasem może być kilka dziur dla danego obrysu zewnętrznego.

Wyznaczenie obszarów przecinających się

[edytuj | edytuj kod]

Tym razem nie zaczynamy od punktu wielokąta a od punktów przecinania się. Każdy punkt przecięcia zmienia wielokąt, którym przechodzimy. Za pierwszym razem wybieramy wielokąt przeciwny niż byłby wybrany w tym punkcie przy przechodzeniu całego obrysu - unii wielokątów.