Rurociąg do tworzenia siatek Voronoi


10

Chciałbym wdrożyć wtyczkę Maya (to pytanie jest niezależne od Mayi), aby tworzyć wzory 3D Voronoi, coś w stylu

wprowadź opis zdjęcia tutaj

Wiem tylko, że muszę zacząć od próbkowania punktowego (zaimplementowałem adaptacyjny algorytm próbkowania Poissona opisany w tym artykule ).

Pomyślałem, że z tych punktów powinienem utworzyć drut 3D siatki za pomocą Voronoi (próbowałem użyć (Python) scipy.spatial.Voronoi, ale wynik był inny niż się spodziewałem).

Czegoś mi brakuje? Czy ktoś może zasugerować odpowiedni potok i algorytmy, które muszę wdrożyć, aby stworzyć takie wzorce?

[EDYCJA] Oto kilka przykładów tego, co dostaję, radząc sobie z rezultatem, który otrzymuję z scipy.spatial.Voronoi, jak to (jak sugerowano tutaj ):

vor = Voronoi(points)
for vpair in vor.ridge_vertices:
    for i in range(len(vpair) - 1):
        if all(x >= 0 for x in vpair):
            v0 = vor.vertices[vpair[i]]
            v1 = vor.vertices[vpair[i+1]]
            create_line(v0.tolist(), v1.tolist())

Szare wierzchołki są próbkowanymi punktami (pierwotny kształt był prostą kulą): wprowadź opis zdjęcia tutaj

Oto bardziej złożony kształt (ramię) wprowadź opis zdjęcia tutaj


Dziękuję za odpowiedź. Mam zamiar powtórzyć to, co zrobiłem, i opublikować ekran zgodnie z sugestią. W każdym razie ostatecznym celem tego pytania nie jest debugowanie mojego kodu, ale zrozumienie, czy to, co robię, jest właściwe, czy też są inne kroki, których mi brakuje!
— Jiloc,

dodano przykłady zgodnie z sugestią!
— Jiloc

Punkty z próbkowania Poissona są słuszne. Algorytm, który je generuje, jest w pełni testowany jednostkowo, a te, które widzisz na ekranach, to sfery ze środkiem w próbkowanym punkcie, który utworzyłem programowo przed wywołaniem Voronoi (punkty)! Martwię się, że nie podążam właściwą ścieżką lub niewłaściwie
— obchodzę się

Pokazane obrazy wykonały voronoi na funkcji 2d.
— joojaa,

@joojaa Na podstawie przykładowych obrazów spodziewałem się, że krawędzie komórek Voronoi na powierzchni 2D były wymagane (aby uzyskać zbiór odcinków linii łączących punkty na powierzchni kuli, a nie zbiór odcinków płaszczyzny, które zostaną podane w 3D) . Wydaje się jednak, że scipy.spatial.Voronoi jest przeznaczony do przestrzeni N wymiarów, a nie do powierzchni w nich osadzonych. Nie widzę od razu, w jaki sposób zostałby wykorzystany do punktów 3D ograniczonych do powierzchni 2D.
— trichoplax

Odpowiedzi:


1

http://www.cs.sandia.gov/~samitch/papers/vor_final.pdf W żadnym języku programowania nie ma algorytmu komputerowego, ale powinieneś być w stanie łatwo go replikować za pomocą niektórych odbić płaszczyzny i algorytmów z powyżej linku.


Witamy w ComputerGraphics.SE! Zazwyczaj dobrym pomysłem jest samodzielne udzielanie odpowiedzi na Stack Exchange (np. W przypadku, gdy linki się zejdą, a także ogólnie, aby ludzie nie musieli podążać za linkami, aby stwierdzić, czy odpowiedź jest dla nich przydatna). Możesz poprawić swoją odpowiedź, dołączając krótkie streszczenie zawartości artykułu.
— Martin Ender
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.