Qualcuno sa come creare un algoritmo in grado di rendere la figura proprio come nella foto, quando viene dato un set di punti specifici (array 3D)
Qualcuno sa come creare un algoritmo in grado di rendere la figura proprio come nella foto, quando viene dato un set di punti specifici (array 3D)
Risposte:
Venendo qui dopo la battaglia, ma poiché non ci sono ancora risposte accettate e visto che @Luke rifiuta di ottenere il rappresentante che merita, ecco un breve riassunto del link che ha fornito.
Quindi l'algoritmo completo è disponibile qui:
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
L'idea è di eseguire il bootstrap della mesh con un metodo semplice che ti dia una sfera con 20 facce e quindi perfezionarla fino a quando non sei soddisfatto.
Inizi con un icosaedro . Come dice l'articolo di Wikipedia, puoi ottenere i vertici disegnando tre rettangoli identici e ortogonali. Hai 3 rettangoli con 4 angoli ciascuno -> 12 vertici.
Illustrazione di Wikipedia:
Ad esempio, i punti del piano Z sono (a, b sono le lunghezze del rettangolo):
Ora devi ancora trovare le 20 facce. Questo è lasciato come esercizio al lettore: p
Ora che hai una sfera di base, potresti voler aggiungere poligoni. Lo fai con questo semplice algoritmo:
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
Per trovare il punto medio, supponiamo di voler creare la sfera unitaria (centro (0, 0, 0), raggio 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)
Ad ogni iterazione, potremmo dover ricostruire i volti, ma è abbastanza facile. Ogni faccia è divisa in quattro: