Bspline 정의
$n + 1$개의 제어점 $(P_0 , P_1 , ... , P_{n-1} , P_n)$과 $\text{knot vector U}={U_0 , U_1 , ... , U_{m-1} , U_m}$,
Bspline의 차수 p가 주어져있을 때 Bspline곡선은
$$ \begin{aligned} C(u)&=\sum_{i=0}^n N_{i,p}(u) P_i,\\ N_{i,0}&=\begin{cases} 1 & u_i \le u \lt u_{i+1}\\ 0 & otherwise \end{cases}\\ N_{i,p}&=\frac{u-u_i}{u_{i+p} - u_i} N_{i,p-1}(u) + \frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}} N_{i+1,p-1}(u) \end{aligned} $$ 이 됩니다.
위 식은 Bezier 곡선 식과 유사하지만 보다 많은 항들이 있습니다.
$N_i,p(u)$는 Bspline의 basis function이고, 여기서 p는 Bspline곡선의 차수이고, $P_i$는 제어점입니다.
매듭 벡터의 개수($m+1$)와 제어점의 개수와 곡선의 차수와의 관계를 살펴보면, 아래와 같은 식을 만족하게 됩니다. $$ \textcolor{red}{m=n+p+1} $$ 이 식이 성립되는 이유는 아래절에 나와 있습니다.
Bezier의 Basis Function에는 없는 두 가지의 특성이 있는데,
-
① 도메인이 여러 개의 knot으로 나누어져 있습니다.
② Basis Function이 도메인 전 영역에 걸쳐서 0보다 작지는 않습니다.
Bspline이 기반을 두고 있는 도메인이 여러 개의 knot으로 나누어진다고 했는데,
이 여러 개의 knot의 묶음인 knot vector U는 오름차순으로 정렬되어 있는 여러 개의 실수들로 구성되어 있습니다. $$ \begin{aligned} U&=\{u_0,u_1,...,u_{m-1},u_m\},\text{ } u_0 \le u_1 \le ... \le u_{m-1} \le u_m\\ u_i&=knot \end{aligned} $$ $[Ui , U_{i+1})$에 의해서 표현되는 구간을 i-th knot span이라고 합니다.
매듭들의 관계가 '~보다 크다'가 아니라 '~보다 크거나 같다'이기 때문에 같은 값의 매듭들이 존재할 수 있습니다.
일반적으로 3가지 종류의 knot vector가 존재하는데, 매듭들이 일정한 간격으로 분포되어 있으면 매듭 벡터 U는 주기적(uniform)이다 하고 그렇지 않으면 비 주기적(non-uniform)이다라고 합니다.
나머지 하나는 open uniform 또는 open이라고 합니다.
위에서는 서로 이웃하는 knot에 대한 관계만을 정했을 뿐, knot vector가 어디에서부터 시작하는지는 말하지 않았습니다. 하지만 일반적으로 0에서 시작합니다.
주기적 매듭 값일 때는
$$ u_i=i,(0 \le i \le n+p) $$ 이 됩니다.
open uniform 매듭 값일 때는
$$ u_i= \begin{cases} 0 & 0 \le i \le p \\ i-p & p+1 \le i \le n-1, p = degree \\ n-p & n \le i \le n + p \end{cases} $$ 이 됩니다.
open uniform 매듭 값을 가지는 Bspline 곡선은 Bezier 곡선과 흡사합니다. 차수 p가 제어점의 개수보다 하나 작으면 Bezier 곡선이 됩니다.
비 주기 매듭 벡터는 매듭 값들의 간격이 일정하지 않거나 중복되는 매듭 값을 가질 수 있습니다.
댓글
댓글 쓰기