Est-ce que quelqu'un connaît un algorithme qui permet une figure comme cette image?

9

Est-ce que quelqu'un sait comment créer un algorithme capable de faire la figure comme dans l'image, quand on lui donne un ensemble de points spécifiques (tableau 3D)

entrez la description de l'image ici

user88794
la source
4
C'est une chose, c'est ce que vous cherchez: blog.andreaskahler.com/2009/06/…
Luke San Antonio Bialecki
3
@LukeSanAntonio Publiez cela comme une réponse afin que je puisse le voter s'il vous plaît;) (mais pas seulement le lien, une explication minimale de l'algorithme serait nécessaire pour une réponse)
yannis
1
@YannisRizos Je le ferais, mais je n'ai aucune connaissance ou expérience dans ce genre de chose, donc je ne pourrais pas vous donner une explication adéquate (enfin je pourrais, mais d'autres pourraient faire beaucoup mieux) La seule raison pour laquelle je connaissais le lien est parce que je connaissais le nom de la forme de Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Luke San Antonio Bialecki
la création de l'ombre à partir d'un objet 3D se fait quotidiennement, consultez la cartographie des ombres et le volume des ombres , mais il y a plus d'algorithmes de création d'ombres disponibles
ratchet freak
Ce n'est pas l'ombre que je cherche à créer, c'est l'objet physique. Nous allons l'imprimer en 3D.
user88794

Réponses:

5

Venir ici après la bataille, mais comme il n'y a pas encore de réponse acceptée et voyant que @Luke refuse d'obtenir le représentant qu'il mérite, voici un bref résumé du lien qu'il a fourni.

Donc, l'algorithme complet est disponible ici:

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

L'idée est d'amorcer votre maillage avec une méthode simple qui vous donne une sphère à 20 faces, puis de l'affiner jusqu'à ce que vous soyez satisfait.

Bootstrapping la forme

Vous commencez avec un icosaèdre . Comme le dit l'article de wikipedia, vous pouvez obtenir les sommets en dessinant trois rectangles identiques et orthogonaux. Vous avez 3 rectangles avec 4 coins chacun -> 12 sommets.

Illustration Wikipédia:

icosaèdre

Par exemple, les points du plan Z sont (a, b sont les longueurs du rectangle):

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

Maintenant, vous devez encore trouver les 20 visages. Ceci est laissé comme exercice au lecteur: p

Affiner la forme

Maintenant que vous avez une sphère de base, vous pouvez ajouter des polygones. Vous le faites avec cet algorithme 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

Pour trouver le point médian, nous supposons que nous souhaitons créer la sphère unitaire (centre (0, 0, 0), rayon 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)

À chaque itération, nous devrons peut-être reconstruire les visages, mais c'est assez facile. Chaque visage est divisé en quatre:

affiner le visage

Simon Bergot
la source