Jednym ze sposobów, w jaki można to zrobić, jest rozpoczęcie od bryły platońskiej o trójkątnych bokach - na przykład octahedron. Następnie wziąć każdy trójkąt i rekursywnie podzielić go na mniejsze trójkąty, tak jak poniżej:
Gdy masz wystarczającą ilość punktów, to unormować ich wektory tak, że wszystkie są w stałej odległości od centrum ciała stałego. Powoduje to, że boki wybrzuszają się do kształtu przypominającego kulę, ze wzrostem gładkości w miarę zwiększania liczby punktów.
Normalizacja oznacza tutaj przesuwanie punktu tak, aby jego kąt w stosunku do innego punktu był taki sam, ale odległość między nimi jest różna. Oto dwuwymiarowy przykład.
A i B są 6 jednostek siebie. Ale załóżmy, że chcemy znaleźć punkt na linii AB, który jest 12 jednostek od A.
Można powiedzieć, że C jest znormalizowana forma B względem A, z odległością 12. Możemy uzyskania C z kodem tak:
#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
Jeśli robimy ten proces normalizacji na dużo punktów, wszystkie w odniesieniu do tego samego punktu a iz tą samą odległość R, a następnie znormalizowane punkty zostaną wszystkie leżą na łuku koła o środku A i promieniu R.
Tutaj czarne punkty zaczynają się na linii i "wybrzuszają się" w łuk.
Proces ten można rozszerzyć na trzy wymiary, w którym to przypadku otrzymujemy kulę, a nie okrąg. Wystarczy dodać komponent dz do funkcji znormalizowanej.
Jeśli spojrzeć na sferze w Epcot można zobaczyć ten rodzaj techniki w pracy. jest dwunastościanem z wybrzuszonymi twarzami, aby wyglądał na bardziej okrągły.
wyszukać współrzędne sferyczne dla wyjaśnienia matematycznego (w szczególności przekształcenie ze współrzędnych sferycznych na współrzędne kartezjańskie). –