Mam 3 wierzchołki (V1, V2, V3)
losowo wybrane na regularnej siatce trójkąta. Dla tych 3 wierzchołków obliczyłem odległość geodezyjną i ścieżkę (używając Dijkstry) między nimi i utworzyłem powierzchnię podobną do trójkąta, jak na powyższym rysunku.
Teraz mam wierzchołki, które leżą na każdej ścieżce i mogę obliczyć odległości geodezyjne od danego wierzchołka.
Chcę uzyskać wierzchołki lub trójkąty, które leżą w obszarze podobnym do trójkąta. W jaki sposób mogę to zrobić?
mesh
triangulation
mkocabas
źródło
źródło
Odpowiedzi:
Istnieje alternatywna metoda polegająca na wypełnianiu powodzi. Najpierw ułóż dane krawędzi w pętli, w której krawędzie tworzą pętlę przeciwnie do ruchu wskazówek zegara. Następnie zacznij od dowolnego punktu na pętli i wybierz krawędzie łączące ten punkt. Użyj wychodzącej krawędzi granicznej i skrzyżuj ją z drugą krawędzią wychodzącą, jeśli wskazuje ona normalną stronę twarzy, to jest to krawędź do uwzględnienia, jeśli nie, odrzuć ją. Od tej krawędzi kontynuuj, aż dojdziesz do krawędzi granicznej, w którym to momencie kończysz wypełnienie. Kontynuuj na jeszcze odwiedzanym wierzchołku krawędzi granicy.
źródło
Skomentowałem już użycie wypełnienia zalewowego i tego, jak byłoby lepiej, ponieważ jest bardziej elastyczny, ale innym możliwym rozwiązaniem jest scanline. (Mówię, że jest to możliwe, ponieważ robi wiele założeń na temat twojej geometrii, ale dla konkretnego pokazanego zestawu i wielu podobnych działałoby.)
Na przykład z 3 punktami: Znajdź wierzchołek przecięcia z segmentu v1, v2 i linii, na której leży v3. (Wierzchołek w lewym górnym rogu v2) Nazwiemy ten wierzchołek v4.
Nazywa się to scanline, ponieważ (na powyższym obrazku) wchodzisz jednocześnie po czerwonych i zielonych liniach, a następnie czerwone i niebieskie linie jednocześnie skanujesz linie podczas jazdy.
To rozwiązanie byłoby bardzo szybkie, jeśli istnieje wzorzec indeksu, co często ma miejsce. W przeciwnym razie konieczne byłoby obliczenie w celu ustalenia, który sąsiadujący wierzchołek leży na linii.
Zabawne jest skanowanie liniowe, barycentryczne testowanie (w obwiedni trójkąta) i wypełnianie przez zalanie to wszystkie sposoby rysowania trójkątów w renderowaniu 3d.
źródło
Myślę, że możesz obliczyć niektóre współrzędne barycentryczne związane z powierzchnią dla każdego punktu na powierzchni, a następnie użyć ich do sprawdzenia wewnątrz lub na zewnątrz trójkąta.
Nie mam pod ręką dokładnego algorytmu, ale znalazłem następujący artykuł, który wydaje się obsługiwać dokładnie tego rodzaju współrzędne.
Współrzędne barycentryczne na powierzchniach
źródło