bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

3次のB-Spline基底関数 by de Boor Cox漸化式

3次(階数4)のB-Spline基底関数
階数:m=4
コントロールポイント(節点)n=4
ノットベクトル(ノットm+n=8個)T=[t0,t1,t2,t3,t4,t5,t6,t7]=[-3,-2,-1,0,1,2,3,4]
とすと,
 t_{m-1} \le t \le t_{n}
が計算すべきセグメントとなり,
 t_{3} \le t \le t_{4}
とできる.
N_{i,1}(t)=\begin{cases}1&(t_{0} \le t \le t_{i+1})\\0&(t \le t_{i},\hspace{2pt}t_{i+1}\le t) \end{cases}
は, 計算すべきセグメントにおいて,
N_{0,1}(t)=0\hspace{5pt} (t_{0} \le t \le t_{1})
となる. これは,
t_{3} \le t \le t_{4}
の外であることから, 0となっている.
このことから, m=1の時は,
N_{0,1}(t)=N_{1,1}(t)=N_{2,1}(t)=N_{4,1}(t)=N_{5,1}(t)=N_{6,1}(t)=0\\N_{3,1}(t)=1
となる。注目するべきは,
N_{3,1}(t)=1
のみである.
次に,
N_{i,m}(t)=\frac{t-t_{i}}{t_{i+m-1}-t_{i}} N_{i,m-1}(t) + \frac{t_{i+m}-t}{t_{i+m}-t_{i+1}}N_{i+1,m-1}
を用いて、m=2の時を計算する.
N_{0,2}(t)=\frac{t-t_{0}}{t_{1}-t_{0}} N_{0,1}(t) + \frac{t_{2}-t}{t_{2}-t_{1}}N_{1,1}
これにノットベクトルのノット(要素)を代入すると,
N_{0,2}(t)=\frac{t-(-3)}{(-2)-(-3)} N_{0,1}(t) + \frac{(-1)-t}{(-1)-(-2)}N_{1,1}
となるが, ここで,
N_{0,1}(t)=N_{1,1}(t)=0
であることから、
N_{0,2}(t)=0
である.
同様にして,
N_{1,2}(t)=0
となる.
しかし, 注意が必要で,
N_{2,2}(t)=\frac{t-t_{2}}{t_{3}-t_{2}} N_{2,1}(t) + \frac{t_{4}-t}{t_{4}-t_{3}}N_{3,1}
N_{3,2}(t)=\frac{t-t_{3}}{t_{4}-t_{3}} N_{3,1}(t) + \frac{t_{5}-t}{t_{5}-t_{4}}N_{4,1}
は、
N_{3,1}(t)=1
が含まれているからである.
N_{2,2}(t)=\frac{t-t_{2}}{t_{3}-t_{2}} N_{2,1}(t) + \frac{t_{4}-t}{t_{4}-t_{3}}N_{3,1}
\hspace{31pt}=\frac{t-(-1)}{0-(-1)} \cdot 0 + \frac{1-t}{1-0} \cdot 1
\hspace{31pt}=1-t
N_{3,2}(t)=\frac{t-t_{3}}{t_{4}-t_{3}} N_{3,1}(t) + \frac{t_{5}-t}{t_{5}-t_{4}}N_{4,1}
\hspace{31pt}=\frac{t-0}{1-0} \cdot 1 + \frac{2-t}{2-1} \cdot 0
\hspace{31pt}=t
となる。
その他については,
N_{3,1}(t)=1
が含まれないので、
N_{4,2}(t)=N_{5,2}(t)=N_{6,2}(t)=0
となる。
m=3について, 上記と同様に,
N_{i,3}=\frac{t-t_{i}}{t_{i+2}-t_{i}}N_{i,2}(t) + \frac{t_{i+3}-t}{t_{i+3}-t_{i+1}}N_{i+1,2}(t)
を計算していく.
すると,
N_{1,3}(t)=\frac{(1-t)^2}{2}\\N_{2,3}(t)=-t^2+t+\frac{1}{2}\\N_{3,3}(t)=\frac{t^2}{2}
m=4についても同様に,
N_{0,4}(t)=\frac{(1-t)^3}{6}\\N_{1,4}(t)=\frac{t^3}{2}-t^2+\frac{2}{3}
N_{2,4}(t)=-\frac{t^3}{2}+\frac{t^2}{2}+\frac{t}{2}+\frac{1}{6}\\N_{3,4}(t)=\frac{t^3}{6}
以上が、コントロールポイント4個、3次のB-Spline曲線の基底関数.

CAD・CG技術者のための実践NURBS

CAD・CG技術者のための実践NURBS

追記2014/08/04
texが崩れていたので修正しました。
昔書いたtexが崩れていたので修正した - bate's blog