이를 수행 할 수있는 한 가지 방법은 삼각형면이있는 플라토닉 솔리드 ( 예 : 팔면체 )로 시작하는 것 입니다. 그런 다음 각 삼각형을 재귀 적으로 더 작은 삼각형으로 나눕니다.
충분한 양의 점이 있으면 벡터가 모두 솔리드 중심에서 일정한 거리에 있도록 벡터를 정규화합니다. 이렇게하면 점의 수를 늘릴수록 부드러움이 증가하면서 측면이 구와 유사한 모양으로 돌출됩니다.
여기서 정규화는 다른 점에 대한 각도는 같지만 그 사이의 거리는 다르도록 점을 이동하는 것을 의미합니다. 다음은 2 차원 예입니다.
A와 B는 6 단위 떨어져 있습니다. 그러나 우리가 A에서 12 단위 떨어진 라인 AB에서 한 지점을 찾고 싶다고 가정 해 보겠습니다.
C는 거리가 12 인 A에 대해 B의 정규화 된 형태라고 말할 수 있습니다. 다음과 같은 코드로 C를 얻을 수 있습니다.
#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
이 정규화 과정을 같은 점 A와 같은 거리 R에 대해 많은 점에 대해 수행하면 정규화 된 점은 모두 중심 A와 반경 R을 가진 원호에 놓일 것입니다.
여기에서 검은 색 점은 선에서 시작하여 호로 "부풀어집니다".
이 과정은 3 차원으로 확장 될 수 있으며,이 경우 원이 아닌 구를 얻게됩니다. 정규화 함수에 dz 구성 요소를 추가하기 만하면됩니다.
Epcot 에서 구를 보면이 기술이 작동하는 것을 볼 수 있습니다. 더 둥글게 보이게하기 위해 얼굴이 튀어 나온 십이 면체입니다.