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)
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)
Réponses:
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.
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:
Par exemple, les points du plan Z sont (a, b sont les longueurs du rectangle):
Maintenant, vous devez encore trouver les 20 visages. Ceci est laissé comme exercice au lecteur: p
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: