¿Alguien sabe de un algoritmo que permita una figura como esta imagen?

9

¿Alguien sabe cómo crear un algoritmo capaz de hacer la figura como en la imagen, cuando se le da un conjunto de puntos específicos (matriz 3D)

ingrese la descripción de la imagen aquí

usuario88794
fuente
44
Es una cosa, es esto lo que estás buscando: blog.andreaskahler.com/2009/06/…
Luke San Antonio Bialecki
3
@LukeSanAntonio Publique eso como respuesta para que pueda votarlo por favor;) (pero no solo el enlace, sería necesaria una explicación mínima del algoritmo para una respuesta)
yannis
1
@YannisRizos lo haría, pero no tengo ningún conocimiento o experiencia en este tipo de cosas, por lo que no podría darle una explicación adecuada (bueno, podría, pero otros podrían hacerlo mucho mejor). La única razón por la que conocía el enlace es porque sabía el nombre de la forma de Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Luke San Antonio Bialecki
la creación de la sombra de un objeto 3D se realiza diariamente, echa un vistazo a la cartografía sombra y volumen de sombra , pero hay más algoritmos de creación de sombra disponibles
monstruo de trinquete
No es la Sombra que estoy buscando crear, es el objeto físico. Vamos a imprimirlo en 3D.
user88794

Respuestas:

5

Viniendo aquí después de la batalla, pero dado que aún no hay una respuesta aceptada y viendo que @Luke se niega a obtener el representante que se merece, aquí hay un resumen rápido del enlace que proporcionó.

Entonces, el algoritmo completo está disponible aquí:

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

La idea es arrancar su malla con un método simple que le da una esfera con 20 caras, y luego refinarla hasta que esté satisfecho.

Bootstrapping la forma

Empiezas con un icosaedro . Como dice el artículo de wikipedia, puede obtener los vértices dibujando tres rectángulos idénticos y ortogonales. Tienes 3 rectángulos con 4 esquinas cada uno -> 12 vértices.

Ilustración de Wikipedia:

icosaedro

Por ejemplo, los puntos del plan Z son (a, b son las longitudes de los rectángulos):

  • (+ a, + b, 0)
  • (-a, + b, 0)
  • (+ a, -b, 0)
  • (-a, -b, 0)

Ahora todavía tienes que encontrar las 20 caras. Esto se deja como ejercicio para el lector: p

Refinando la forma

Ahora que tiene una esfera básica, es posible que desee agregar polígonos. Lo haces con este algoritmo simple:

for each iteration:
    # each iteration multiplies by 4 the number of faces
    for each edge at the current iteration:
        split the edge in two
        replace the middle point on the sphere

Para encontrar el punto medio, suponemos que deseamos crear la esfera unitaria (centro (0, 0, 0), radio 1).

middlePoint(p1, p2):
    middle = Point((p1.X + p2.X / 2), # same for y, z)
    radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
    return Point(middle.X / radius,  # same for y, z)

En cada iteración, es posible que tengamos que reconstruir las caras, pero es bastante fácil. Cada cara se divide en cuatro:

cara refinar

Simon Bergot
fuente