Testowanie, czy czworościan leży w wielościanie

15

Mam czworościanu oraz graniastosłupa . jest tak ograniczony, że zawsze dzieli wszystkie swoje wierzchołki z . Chcę ustalić, czy leży wewnątrz .t t p tptpt p

Chciałbym dodać jeden szczegół do problemu, w przypadku gdy może on przyczynić się do rozwiązania: jest czworościanem Delaunaya, a ściany są trójkątne i silnieDelaunay zarówno pod względem wierzchołków . Czworościan to Delaunay, jeśli otoczenie jego wierzchołków nie zawiera w sobie żadnego innego wierzchołka. Twarz jest silnie Delaunay jeśli istnieje circumsphere zawierającą wierzchołki tej twarzy na jej powierzchni, ale żaden inny wierzchołek na lub wewnątrz niego.tpp

Poniższe rysunki pokazują ten sam problem w przestrzeni : 2D

Pierwotny wielokątp :

wprowadź opis zdjęcia tutaj

Delaunay triangulacja wierzchołkówp :

wprowadź opis zdjęcia tutaj

Wynik testu wewnątrz / na zewnątrz trójkątówt (trójkąty zacieniowane znajdują się wewnątrz a reszta na zewnątrz ):p

wprowadź opis zdjęcia tutaj

Pożądany wynik (przycinanie poza trójkątami) :

wprowadź opis zdjęcia tutaj


Mój pierwotny problem dotyczy przestrzeni 3D, więc trójkąty na powyższych figurach tłumaczą się na czworościany, a wielokąt przekłada się na dowolny wielościan . Opracowałem kilka sformułowań tego problemu:ptpp

Formulacja 1
Jedynymi częściami które mogą znajdować się na zewnątrz są jego krawędzie i trójkątne powierzchnie, ale ogólnie może istnieć które ma krawędzie wszystkich zewnętrznych na swojej powierzchni, więc alternatywnie, problem ten można również sformułować tak, aby sprawdzić, czy dla czworościanu istnieje twarz, która leży na zewnątrz ?p p t t ptpp tt p

Formuła 2
Mam inną możliwą perspektywę na ten problem, ale brakuje mi formalnego pomysłu:
geometrycznie, jeśli jest na zewnątrz, to zawsze będzie przyczepiał się do zewnętrznej powierzchni . Jeśli więc możemy obliczyć kontury (nieformalnie, zewnętrzna granica) i taki sposób, że i są zestawami wierzchołków odpowiednio, a następnie iff leży wewnątrz . p C V C V p V = V tV p V t , V p t , p C V = C V p t ptpCVCVpV=VtVpVt,Vpt,pCV=CVp tp

Chciałbym wiedzieć:

  • Jak mogę rozwiązać formułę 1 lub formułę 2 ?
  • Czy jest jakieś inne podejście do rozwiązania tego problemu?

Aktualizacja:
Teraz zdaję sobie sprawę, że ten problem można sprowadzić do problemu Punkt w wielościanie . Ponieważ zewnętrzny czworościan będzie miał co najmniej jedną powierzchnię, która leży na zewnątrz , więc dowolny dowolny punkt na tej powierzchni (z wyjątkiem jej wierzchołków, ogólnie) zawsze będzie znajdować się na zewnątrz . Dlatego dla każdej powierzchni muszę wziąć dowolny punkt i sprawdzić, czy ten punkt leży poza .p p t ptp pt p

Z punktu w artykule o wielokątach dowiedziałem się o algorytmie odlewania promieniami i algorytmie liczby uzwojenia . Odlewanie promieniowe nie jest stabilne numerycznie w przypadkach, w których punkt leży na powierzchni . Jednak nie rozwiązano w tym kwestii niezawodności numerycznej algorytmu liczby uzwojenia. p

Na podstawie powyższego wydaje się, że moim głównym problemem jest (proszę zasugerować, czy należy go zadać jako osobne pytanie):
Czy istnieje jakiś odporny numerycznie algorytm dotyczący problemu z punktem w wielokącie ?

Pranaw
źródło
Tylko dla wyjaśnienia: 1) Czy wielościan być niewypukły , i 2) jeśli i mają wspólną powierzchnię lub krawędź (lub część jednej), czy to dyskwalifikuje od bycia „wewnątrz” ? (Oczywiście, w oparciu o twoje wymagania, i muszą mieć możliwość dzielenia wierzchołków.)t p t p t p pptptptp
Ilmari Karonen
@IlmariKaronen 1) Tak 2). Nie, o ile mogę sobie wyobrazić, jedyną różnicą między czworościanem wewnętrznym i zewnętrznym będzie to, że jego niepodzielona powierzchnia / krawędź będzie leżeć na zewnątrz, jeśli jest na zewnątrz a wewnątrz, jeśli jest wewnątrz (jak wspomniałem również w części Formuła 1 ). BTW, co rozumiesz przez „... lub część jednego…”? p t ptptp
Pranav
1
Dwie ściany współpłaszczyznowe lub krawędzie współliniowe mogą nakładać się tylko częściowo. Może się to zdarzyć, nawet jeśli samo nie ma zbieżnych ścian ani krawędzi, o ile ma więcej niż dwa współliniowe lub więcej niż trzy współpłaszczyznowe wierzchołki. p
Ilmari Karonen
1
nie wypukłość ma tę osobliwość, że wszystkie wierzchołki mogą znajdować się wewnątrz wielościanu, a jednak czworościan może znajdować się na zewnątrz (ponieważ krawędź nie musi leżeć wewnątrz jako całość). Możliwy algorytm, sprawdź, czy krawędzie (między wielościanem i czworościanem) mogą mieć przecięcia => prawdopodobieństwo, że czworościan leży na zewnątrz, jest świetne
Nikos M.
1
Czy widziałeś algorytm odległości Gilberta – Johnsona – Keerthi? Najpierw musisz rozłożyć wielokąt / wielościan na kształty wypukłe (jak zauważyłeś, wystarczy prosty kompleks). GJK jest znany jako bardzo stabilny i bardzo szybki.
Pseudonim

Odpowiedzi:

2

Niedawno znalazłem jedno rozwiązanie tego problemu w artykule „Solidna segmentacja wewnętrzna i zewnętrzna za pomocą uogólnionych liczb uzwojenia” autorstwa Alec Jacobson i in., Tutaj . Rozwiązuje to problem lokalizacji, jeśli punkt znajduje się wewnątrz (lub na zewnątrz) dowolnej siatki wielokątnej (takiej z samo-przecięciem, bez rozmaitości, z otwartymi powierzchniami itp.) Przy użyciu uogólnionej liczby uzwojenia .

Problem można rozwiązać, jeśli obliczę uogólnioną liczbę uzwojenia środka ciężkości na powierzchni .ptp

Pranaw
źródło
t p p tptpptppttp