Une façon vous pouvez faire est de commencer avec un platonicien solide, avec des faces triangulaires - un octaèdre, par exemple. Ensuite, prendre le de chaque triangle et, récursivement, la diviser en triangles plus petits, comme suit:
Une fois que vous avez suffisamment de points, vous normaliser leurs vecteurs, de sorte qu'ils sont tous à une distance constante du centre de la solide. Cela provoque les côtés bosse dans une forme qui ressemble à une sphère, avec l'augmentation de la finesse comme vous augmentez le nombre de points.
La normalisation ici, c'est le mouvement d'un point, de sorte que son angle par rapport à un autre point est la même, mais la distance entre eux est différent.
Voici deux dimensions, par exemple.
A et B sont de 6 unités de distance. Mais supposons que nous voulons trouver un point sur la ligne AB de 12 unités A.
On peut dire que C est la forme normalisée de B par rapport à A, avec la distance 12. Nous pouvons obtenir C avec un code comme ceci:
#returns a point collinear to A and B, a given distance away from A.
function normalize(a, b, length):
#get the distance between a and b along the x and y axes
dx = b.x - a.x
dy = b.y - a.y
#right now, sqrt(dx^2 + dy^2) = distance(a,b).
#we want to modify them so that sqrt(dx^2 + dy^2) = the given length.
dx = dx * length / distance(a,b)
dy = dy * length / distance(a,b)
point c = new point
c.x = a.x + dx
c.y = a.y + dy
return c
Si nous faisons ce processus de normalisation sur beaucoup de points, tous de la même point (A) et avec la même distance R, les normalisé points se trouvent tous sur l'arc de cercle de centre A et de rayon R.
Ici, les points noirs de commencer sur une ligne et "renflement" dans un arc.
Ce processus peut être étendu en trois dimensions, dans ce cas, vous obtenez une sphère plutôt que d'un cercle. Il suffit d'ajouter une dz composante de la fonction de normalisation.
Si vous regardez la sphère à Epcot, vous pouvez sorte de voir cette technique au travail. c'est un dodécaèdre avec enflé-dehors de visages pour donner un aspect plus rond.