さとし日記

都内大学院生のブログ

数時間かけてようやく理解できた時の感動は筆舌に尽くしがたいものがあるのに、次の瞬間には自明のものとなり冷めてしまう。クレーンゲームで景品を取るまでは楽しいけど、取ってしまったらその景品はどうでも良くなる感覚に近い。

試行錯誤する過程も面白いし、わかった瞬間は物凄く感動するのにすぐに「まぁそりゃそうだよね。。」となってしまう。


手に入れるまでが楽しいというのは割と一般性のある話だったりするのかな。

 

 

そんなわけで?最近はCGについて簡単に勉強していて、今は曲線の表現、特にBézier曲線について主に勉強している(大学院での研究とは関係ないので書いても問題ない)。


Bézier曲線は制御点を与えることで簡便に曲線を書くことができ、尚且つアフィン変換に対して不変であるのでコンピュータ上で曲線を描くのによく用いられる。


アフィン変換に対して不変であるというのは、曲線を平行移動、拡大縮小したい時、曲線という無限の点の集合をそれぞれ変換しなくても、制御点を変換してから、その変換後の制御点を用いて曲線を書いても結果が等しくなるという性質を指す。


Bézier曲線は制御点とBernstein多項式の線形結合として表される。


そもそも一般にn次の多項式

a_n•x^n + ... + a_1•x^1 + a_0•x^0

というのは、係数(a_n, …, a_1, a_0)が単項式基底

(x^n, …, x^1, x^0)

の要素となっており、係数が定まれば元の多項式も一意に定まる。


つまり、n次多項式というのは、(n+1)次元の線形関数空間を張っていると言える。


また、基底は単項式基底である必要はなく、線型独立であればベクトル基底でも何でも良い。


ここで、 Bernstein多項式を考えてみると、n次のBernstein多項式は(n+1)個の多項式で表現される。

それらは線型独立なので、基底を張ることができる。


また一般に、n次多項式というのは、(n+1)次多項式の部分集合になっており(∵n+1次の項の係数を0にすればn次の多項式になる)、これはBernstein多項式でも成立する。


n次のBézier曲線はn次のBernstein多項式を用いて表現される曲線であり、同様に(n+1)次のBézier曲線は(n+1)次のBernstein多項式を用いて表現される曲線である。


この時、n次のBernstein多項式は(n+1)次のBernstein多項式の部分集合であることから、n次のBézier曲線は(n+1)次のBézier曲線の部分集合であることが言える。


つまり制御点の数を増やしても増やす前と全く同じBézier曲線を引くことができるということを意味する。

 

 

そしてさらに、Bernstein多項式基底と単項式基底には以下のような関係が成立する。


B_i^n(t) = Σ{j=0~n} {m_ij • t^j}

m_ij = (-1)^(j-i) • nCj • jCi


で、これの証明に2,3時間かかって、できた瞬間は感動したけど、すぐに「当たり前じゃない……?」となってしまったというお話。