오다기리 박의 알고리즘 노트

베지에 곡선 (Bézier Curve) 본문

컴퓨터 그래픽스/메쉬 기하학

베지에 곡선 (Bézier Curve)

오다기리 박 2022. 7. 15. 16:00

곡선으로 표현된 폰트

 

 

베지에 곡선 (Bézier curve)는 n개의 제어점(control point)으로부터 만들어지는 n-1차 곡선으로 수치 해석 분야에서 중요하게 사용된다. 특히 3차 베지에 곡선은 포스트스크립트 글꼴, 메타폰트(METAFONT), 김프 등에서 부드러운 폰트를 만드는데에 이용되고 있다. 이 글에서 3차 베지에 곡선의 수학적인 표현법에 대해 알아보자.

 

 

다음 그림처럼 실수 파라미터 t가 0과 1사이에서 움직인다고 하자. 움직이는 t의 값에 따라서 3차원 공간 위에 그려지는 곡선을 C(t)라고 표기한다. C(t)x, y, z 각 좌표를 t에 대한 식으로 표현할 수만 있다면 우리는 t를 마음대로 움직이면서 그에 대응되는 곡선 위의 점을 구할 수 있을 것이다.

 

 

 

 

그렇다면 C(t)의 식을 어떻게 쓸 수 있을까? 우선 베지에 곡선은 제어점(control point)이 필요하다. 위에서 n-1차 곡선은 n개의 제어점이 필요하다고 했으니 3차 베지에 곡선은 다음 그림처럼 제어점 4개를 갖는다.

 

 

 

 

 

그리고 n차 곡선을 만드는데 필요한 번스타인 기저는 n+1개로 구성되는데, 다음 식으로 계산된다. 

 

 

 

 

여기서 계수는 조합 nCi를 가리킨다. 특히, 3차 베지에 곡선의 번스타인 기저는 다음과 같다.

 

 

 

 

마지막으로 다음과같이 4개의 제어점과 4개의 번스타인 기저(Bernstein basis)의 선형 결합(linear combination)으로 3차 베지에 곡선을 표현한다. 선형 결합은 그냥 각각 곱해준다는 뜻이다.

 

 

 

식을 살펴보면, 제어점의 좌표는 이미 알고 있고 우리가 원하는 파라미터 t를 따라 곡선 C(t)의 좌표를 쉽게 계산할 수 있다.

수학적 표현으로는 곡선 위의 임의의 점을 계산하는 것이 쉬워보인다. 하지만 제어점의 개수 또는 곡선의 차수가 높아지면 다항식이 커지기 때문에 컴퓨터에서 계산시간이 오래 걸릴 수 있다. 계산 효율을 높이기 위해서는 선형 보간(linear interpolation)을 재귀적으로 수행하는 de Casteljau 알고리즘을 구현해야 한다.

 

 

베지에 곡선에는 몇가지 주요 성질이 있다.

  • 곡선의 양끝점이 제어점 양끝점을 지난다.
  • 제어점의 순서을 역순으로 해도 동일한 곡선이 표현된다.
  • 곡선에 어파인 변환 (affine transformation) 즉, 평행 이동, 확대 및 축소, 회전 등의 변환을 적용하려면 제어점에 어파인 변환을 적용하면 된다.
  • 곡선은 제어점의 컨벡스 헐(convex hull)에 포함된다. 제어점을 바닥에 박아놓은 못이라 생각하고 고무줄로 팽팽하게 감싼 모양이 컨벡스 헐이라고 생각하면 된다.
  • 제어점이 일직선상에 있다면 곡선 또한 직선으로 만들어진다.