Bezier曲線
パラメトリック曲線の1つ
$ N個の制御点を使った$ N-1次曲線
Paul de CasteljauとPierre Bézierがそれぞれ独自に開発した
コンピュータ上で曲線を描くときによく使われる
以下、$ B_iの位置vectorを$ \pmb{b}_iと表記する
定義
$ N+1個の制御点$ B_0,B_1,\cdots,B_{N}で表現される$ N次Bezier曲線は以下のように定義される
$ C:[0,1]\ni t\mapsto \sum_{0\le i\le N} \binom{N}{i}t^i(1-t)^{N-i}\pmb{b}_i \in\R^n
同じことだがBernstein基底函数$ b_{i,N}(t)を使うとこうなる
$ C:[0,1]\ni t\mapsto \sum_{0\le i\le N} b_{i,N}(t)\pmb{b}_i \in\R^n
特徴
必ず端点を通る
$ C(0) = \pmb{b}_0
$ C(1)=\pmb{b}_N
まあ当たり前だけど
各次の曲線
1次Bezier曲線
$ C: [0,1]\ni t\mapsto (1-t)\pmb{b}_0 + t\pmb{b}_1 \in \R^n
$ \because \footnotesize \sum_{0\le i\le 1} \binom{1}{i}t^i(1-t)^{1-i}\pmb{b}_i = t\pmb{b}_0+(1-t)\pmb{b}_1
ただの線分$ B_0B_1である
2次Bezier曲線
3次Bezier曲線
一番よく使われる曲線
便利ポイント
支点及び終点の接線をそれぞれ独立して動かせる
初期位置・最終位置・初期接線・最終接線を全て独立して設定できるt-pot 『3次曲線』
4次以上のBezier曲線は殆ど使われない
理由
計算に時間がかかる
3次Bezier曲線を連結させれば表現できる
ただし、急激な変化を表現する目的で使うこともできる
cf. 新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]
制御点をすべて同じ点に置く
式
$ \begin{aligned}&\forall i\in [1, N-1];\pmb{b}_i=\pmb{b}_1\\\implies&\sum_{0\le i\le N}\binom{N}{i}t^i(1-t)^{N-i}\pmb{b}_i\\=&(1-t)^N\pmb{b}_0+\pmb{b}_1\sum_{0< i< N}\binom{N}{i}t^i(1-t)^{N-i}+t^N\pmb{b}_N\\=&(1-t)^N\pmb{b}_0+\pmb{b}_1\left((t+1-t)^N-t^N-(1-t)^N\right)+t^N\pmb{b}_N\\=&(1-t)^N\pmb{b}_0+\pmb{b}_1\left(1-t^N-(1-t)^N\right)+t^N\pmb{b}_N\\=&(1-t)^N(\pmb{b}_0-\pmb{b}_1)+t^N(\pmb{b}_N-\pmb{b}_1)+\pmb{b}_1\end{aligned}
demo
図解
desmos
De Casteljauのalgorithmを用いると明快に理解できる
References
ベジェ曲線 - Wikipedia
ベジェ曲線
De_Casteljau's_algorithm - Wikipedia
#ベジェ曲線
#2021-09-15 13:47:39