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

Jiloc
źródło
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.

Zeitaku Enjin
źródło
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