Tubería para crear mallas Voronoi

10

Me gustaría implementar un complemento Maya (esta pregunta es independiente de Maya) para crear patrones 3D Voronoi, algo así como

ingrese la descripción de la imagen aquí

Solo sé que tengo que comenzar desde el muestreo puntual (implementé el algoritmo de muestreo adaptativo de Poisson descrito en este documento ).

Pensé que, a partir de esos puntos, debería crear el cable 3D de la malla aplicando Voronoi (intenté usar (Python) scipy.spatial.Voronoi pero el resultado fue algo diferente de lo que esperaba).

Me estoy perdiendo algo? ¿Alguien puede sugerir la tubería y los algoritmos adecuados que debo implementar para crear tales patrones?

[EDITAR] Aquí hay algunos ejemplos de lo que obtengo manejando el resultado que obtengo de scipy.spatial.Voronoi como este (como se sugiere aquí ):

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())

Los vértices grises son los puntos muestreados (la forma original era una esfera simple): ingrese la descripción de la imagen aquí

Aquí hay una forma más compleja (un brazo) ingrese la descripción de la imagen aquí

Jiloc
fuente
Gracias por la respuesta. Voy a replicar lo que hice y publicar una pantalla como se sugiere. De todos modos, la intención final de esta pregunta no es depurar mi código, ¡sino entender si lo que estoy haciendo es correcto o hay otros pasos que me faltan en el medio!
Jiloc
ejemplos añadidos como se sugiere!
Jiloc
Los puntos del muestreo de Poisson son correctos. ¡El algoritmo que los genera se prueba completamente en unidades y los que se ven en las pantallas son esferas con el centro en el punto de muestra que creé mediante programación antes de llamar a Voronoi (puntos)! Me preocupa no seguir el camino correcto o manejar el resultado de Voronoi de manera incorrecta
Jiloc
Las imágenes que muestra han realizado el voronoi en la función 2d.
joojaa
@joojaa De las imágenes de ejemplo, esperaba que los bordes de las celdas de Voronoi en la superficie 2D fueran lo necesario (para dar una colección de segmentos de línea que conectan puntos en la superficie de la esfera, en lugar de la colección de secciones planas que se darían en 3D) . Sin embargo, scipy.spatial.Voronoi parece estar diseñado para espacios N dimensionales en lugar de superficies incrustadas en ellos. No puedo ver de inmediato cómo se usaría para puntos 3D restringidos a una superficie 2D.
trichoplax

Respuestas:

1

http://www.cs.sandia.gov/~samitch/papers/vor_final.pdf No existe el algoritmo informático en ningún lenguaje de programación, pero debería poder replicarlo fácilmente con algunas reflexiones planas y los algoritmos del enlace de arriba.

Zeitaku Enjin
fuente
Bienvenido a ComputerGraphics.SE! Normalmente, es una buena idea hacer que las respuestas en Stack Exchange sean autónomas (por ejemplo, en caso de que los enlaces se caigan y también en general para que las personas no tengan que seguir los enlaces para poder saber si una respuesta les es útil). Es posible que desee mejorar su respuesta al incluir un breve resumen de los contenidos del documento.
Martin Ender