de Casteljau 작도 · 베른슈타인 가중치

베지에 곡선

다각형의 각 변에서 같은 비율 t에 해당하는 점을 잡고, 이 점들을 이은 더 짧은 다각형에서도 반복하면 마지막에 점 하나가 남습니다. t가 0에서 1까지 움직일 때 이 점이 그리는 것이 베지에 곡선입니다.

이 시각화의 베지에 곡선

n차 베지에 곡선은 n + 1개의 제어점 P0,…,PnP_0, \dots, P_n로 정해집니다. 두 점은 선분, 세 점은 이차 곡선, 네 점은 그림 프로그램에서 쓰는 삼차 곡선을 만듭니다. 곡선 위의 점 B(t)B(t)는 그림에서 빨간색으로 표시되며, 제어 다각형의 각 변에서 비율 t에 해당하는 점을 잡는 과정을 반복해 얻습니다. 여기서는 점들을 옮기고 t를 0에서 1까지 움직이며, 작도 선분들이 실 같은 흔적을 남겨 곡선을 드러내는 모습을 볼 수 있습니다.

작도는 현재 t에서 각 단계의 다각형을 보여 줍니다. 단계마다 앞 단계보다 변이 하나씩 줄어듭니다. 스윕은 t를 0에서 1까지 움직이며, 같은 t 간격으로 작도의 실을 남기고 t에 따라 색을 입힙니다. 곡선 자체는 가는 선입니다.

작도를 식으로 쓰면 가중평균을 단계적으로 계산하는 de Casteljau 알고리즘이 됩니다.

Pi0=Pi,Pik(t)=(1−t) Pik−1(t)+t Pi+1k−1(t),B(t)=P0n(t).P_i^0 = P_i, \qquad P_i^k(t) = (1 - t)\,P_i^{k-1}(t) + t\,P_{i+1}^{k-1}(t), \qquad B(t) = P_0^n(t) .

이 단계별 계산을 전개하면 각 제어점의 계수는 n개 인자의 곱들을 더한 것이 됩니다. 각 인자는 1 − t 또는 t입니다. PiP_i에 해당하는 각 곱에는 인자 t가 정확히 i개 들어가며, 그런 곱이 (ni)\binom{n}{i}개 있으므로

B(t)=∑i=0nbi,n(t) Pi,bi,n(t)=(ni)ti(1−t)n−i.B(t) = \sum_{i=0}^{n} b_{i,n}(t)\, P_i, \qquad b_{i,n}(t) = \binom{n}{i} t^{i} (1 - t)^{n-i} .

이 가중치들은 베른슈타인 다항식이며 작은 그래프가 이를 보여 줍니다. 0≤t≤10 \le t \le 1에서 가중치는 음수가 되지 않고 합이 1이므로, B(t)B(t)는 점들의 가중평균이고 곡선은 그 점들의 볼록 껍질 밖으로 나가지 않습니다. 한 점 PiP_i를 벡터 Δ만큼 옮기면 곡선의 각 점은 bi,n(t) Δb_{i,n}(t)\,\Delta만큼 이동하며, t=i/nt = i/n 부근에서 가장 많이 움직입니다. 그 부분이 항상 제어점에 가장 가까운 부분인 것은 아닙니다.

t = 0에서는 모든 단계가 P0P_0에서 시작하므로 B(0)=P0B(0) = P_0이고, 마찬가지로 B(1)=PnB(1) = P_n입니다. 곡선은 두 끝점을 지나지만 보통 다른 점들은 지나지 않습니다. 작도의 마지막 단계는 선분 하나이며, 이 선분이 한 점으로 줄어들지 않는 한 곡선의 접선 위에 놓입니다.

B′(t)=n(P1n−1(t)−P0n−1(t)),B′(0)=n (P1−P0),B′(1)=n (Pn−Pn−1).B'(t) = n \bigl(P_1^{n-1}(t) - P_0^{n-1}(t)\bigr), \qquad B'(0) = n\,(P_1 - P_0), \qquad B'(1) = n\,(P_n - P_{n-1}) .

따라서 곡선은 P0P_0에서 P1P_1 쪽으로 출발하고, Pn−1P_{n-1} 쪽에서 PnP_n에 도착합니다. 다만 해당 끝의 두 점이 겹치는 경우는 예외입니다. 그래서 그림 프로그램은 삼차 곡선의 가운데 두 점을 양 끝에서 뻗어 나온 핸들로 표시합니다.

마지막 단계의 실은 한 점으로 줄어들지 않았다면, 그 위에 놓인 곡선의 점에서 곡선에 접합니다. 한 단계 아래의 실도 더 적은 수의 이웃한 점들로 만든 곡선에 같은 방식으로 접합니다. 따라서 실의 각 무리는 저마다 곡선을 드러내고, 다각형 안에는 차수가 더 낮은 곡선들이 보입니다. 윤곽을 드러낸다는 것이 한쪽에서만 감싼다는 뜻은 아닙니다. 변곡점에서는 곡선이 자신의 접선을 가로지르며 실들이 양쪽에 놓입니다. 세 제어점이 한 직선 위에 있지 않으면, 이차 곡선의 실은 두 줄로 곧게 늘어선 못 사이에 실을 감는 스트링 아트에 해당하며, 이들이 드러내는 곡선은 포물선입니다.

t = s에서의 작도는 곡선을 둘로 나누기도 합니다. 각 단계의 첫 점들은 0에서 s까지인 부분의 제어점이 되고, 마지막 점들은 s에서 1까지인 부분의 제어점이 됩니다. 나누기는 이 두 묶음을 보여 줍니다. 계속 절반씩 나누면 각 부분의 제어 다각형이 곡선에 가까워집니다. 차수 높이기는 반대로 갑니다. 제어점이 하나 늘지만 곡선은 같고, 다각형은 곡선에 더 가까워집니다. 반면 그림을 눌러 점을 추가하면 곡선 자체가 바뀝니다.

시트로엥의 폴 드 카스텔조는 1959년에 이 작도법을 고안했습니다. 르노의 피에르 베지에는 독립적으로 같은 곡선을 얻었으며 1960년대에 발표했습니다.

눈여겨볼 점

  • t를 같은 간격으로 움직여도 곡선을 따라 이동하는 거리가 같을 필요는 없습니다.
  • 색이 가장 진한 곳이 곡선은 아닙니다. 실이 가장 많이 겹치는 곳이며, 곡선에서 조금 벗어나 있을 수도 있습니다.

관련 항목