¿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)
fuente
¿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)
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.
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:
Por ejemplo, los puntos del plan Z son (a, b son las longitudes de los rectángulos):
Ahora todavía tienes que encontrar las 20 caras. Esto se deja como ejercicio para el lector: p
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: