ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】N次ベジェ曲線を表示する。

成果物

www.youtube.com
三次以上のベジェ曲線を見たことがなかったのでできないと思い込んでいたのですが、Wikipediaを見ると、式が書かれていたので、早速作ってみました。今後はBスプライン、NURBS曲線も作ってみたいと思います。(Gyroidも作りたいなぁ)

コード

Nth order bezier curveという名前で追加しています。
github.com

仕組み

Wikipediaベジェ曲線の数式はこのようになっています。Bは、制御点の座標なので、関数J()で重みを計算しているようです。
{\displaystyle \mathbf {P} (t)=\sum _{i=0}^{N-1}\mathbf {B} _{i}J_{N-1,i}(t)}
{\displaystyle J_{n,i}(t)={n \choose i}t^{i}(1-t)^{n-i}}
ベジェ曲線 - Wikipedia
()の中に縦に文字が並んでいる物は、二項係数と言って、次のように積の集合で計算できます。
{\displaystyle {\binom {n}{k}}={\frac {n^{\underline {k}}}{k!}}={\frac {n(n-1)(n-2)\cdots (n-(k-1))}{k(k-1)(k-2)\cdots 1}}=\prod _{i=1}^{k}{\frac {n-(k-i)}{i}}=\prod _{i=1}^{k}{\frac {n+1-i}{i}}}
ただし、二項係数は組み合わせの時のように、kをn-kに置き換えても結果が変わらないので、高速化のために小さい方に置き換えています。
二項係数 - Wikipedia