Mam zestaw prostych wielokątów (bez dziur, bez samozacieleń) i muszę sprawdzić, czy się nie przecinają (jedno może być całkowicie zawarte w innym, to jest w porządku). Mogę to sprawdzić, po prostu sprawdzając wnętrze jednego wierzchołka w stosunku do innych wielokątów.Określanie przecięcia i przecięcia wieloboku
Muszę również określić drzewo ograniczające, które jest zbiorem relacji, które mówią, który wielokąt zawiera dowolny dany wielokąt. Ponieważ żaden wielokąt nie może się przecinać z żadnym innym, wtedy każdy zawarty wielokąt ma unikalny pojemnik; "następny większy". Innymi słowy, jeśli A zawiera B zawiera C, to A jest rodzicem B, a B jest rodzicem C, a nie uważamy A rodzicem C.
Pytanie: Jak skutecznie określić relacje powstrzymywania i sprawdzić kryterium braku przecięcia? Pytam to jako jedno pytanie, ponieważ być może połączony algorytm jest bardziej wydajny niż rozwiązywanie każdego problemu osobno. Algorytm powinien przyjąć jako dane wejściowe listę wielokątów, określoną przez listę ich wierzchołków. Powinien generować boolowskie B, jeśli żaden z wielokątów nie przecina żadnego innego wielokąta, a także, jeśli B = prawdziwy, listę par (P, C), gdzie wielobok P jest rodzicem dziecka C.
To nie jest Praca domowa. To jest dla projektu hobby, nad którym pracuję.
Załóżmy, że masz wielokąty w rozmiarach 1, ..., 5 i przypuśćmy, że 1 znajduje się wewnątrz 3, które znajduje się wewnątrz 5, a 2 jest w 4. Następnie 3 pojawia się po 2 na liście, ale niekoniecznie zawiera je. –
W prawo, ale rodzic wieloboku w drzewie przechowawczym będzie pierwszym * zawierającym * wielokąt po nim na liście. Ponieważ 3 nie zawiera 2, nie jest powiązane w drzewie. Jednakże, mimo że 5 zawiera jeden, nie jest on bezpośrednio połączony z drzewem, a zamiast niego jest rodzicem 3, który jest rodzicem 1. –