Bezier and Other Parametric Shaping Functions

Bezier and Other Parametric Shaping Functions - Golan Levin and Collaborators ノート。区間 \({[0, 1]}\) を定義域とする Bezier 曲線を描く整形関数。

Quadratic Bezier

\[\begin{split}\begin{aligned} y &= (1 - 2b)t^2 + 2bt,\quad \text{where}\\ t &= \frac{\sqrt{a^2 - (1 - 2a)x} - a}{1 - 2a}.\\ \end{aligned}\end{split}\]
  • 二次 Bezier 曲線を単位正方形内の指定単一制御点 \({(a, b)}\) で定義する関数だ。

  • この関数は Double-Linear Interpolator と同じ入口傾斜、出口傾斜であることが保証される。言い換えると、単位正方形内の端点における変化率をユーザーが正確に指定することができる曲線だ。

実装の急所

  • \(a\) および \(b\) を単位正方形内に制限すること。

  • \(a = 1/2\) だと少々まずいようで、微小な正の数を加算してごまかす。

  • \(1 - 2a\) がアルゴリズム中に二度現れるので、一次変数に値を格納しておく。

Cubic Bezier

三次 Bezier はコンピューターグラフィックスの主力だ。デザイナーの多くは Adobe Illustrator などのベクトル主体の描画プログラムからそれを認識しているはずだ。

ここでは、この柔軟な曲線を信号整形機能として使用しており、単位正方形内の二点 \({(a, b)}\), \({(c, d)}\) を制御点として指定する必要がある。

制御点二つを様々な位置に設定することで、Bezier 曲線は sigmoid, シート状関数、 ease-in, ease-out を生成するのに使用される。

Bezier 曲線は \(y\)\(x\) がともに別の変数 \(t\) の関数となるように定義されるのが普通だ。\(x\) の関数として \(y\) を得るためには、まず逐次近似を用いて \(t\) を解く必要があり、コードが思ったよりも長くなる。

本文での実装は Don Lancaster 氏 の Bezmath Postscript library からの引用とある。

実装の急所:

  • 方程式を数値解析的手法で解く。Newton-Raphelson 法とコメントにある。

Cubic Bezier (Nearly) Through Two Given Points

この整形関数は、単位正方形内の二点をユーザーが指定することを要求する。アルゴリズムは、これらの点をできるだけ通過する曲線を生成しようと試みる。生成曲線が指定された二点を通過することが保証されてはいないが、ほとんどの場合にかなり接近している。

前項同様、本文での実装は Don Lancaster 氏からの引用とある。

実装の急所:

  • 前項の整形関数によって実装する。