SSブログ

太さの変わるBezier曲線の生成 - その3 [考え中 - 太さの変わるBezier曲線]

先に進める前に、このへんで数学を整理しておく。

NSBezierPathの数学

Bezier曲線の基礎

Cocoaで曲線を描画するときはNSBezierPathを使う。これは3次のBezier(ベジエ)曲線で、定義をWikipediaから(添字の範囲をちょっと変更して)引き写すとBezier曲線P(t)は、媒介変数tが0≤t ≤1の範囲で定義された

0930eq1.png
である。ここで、B0B1...Bnは、n+1個の制御点の座標で、Jni(t)は
0930eq2.png
のような関数である(バーンスタイン基底関数、ブレンディング関数ともいうらしい)。nCiは2項係数で
0930eq3.png
である。

制御点の数が四つの場合、3次曲線になってこれを3次のBezier曲線と呼ぶ。3次の場合の具体的な式を書くと

0930eq4.png
となる。この式から明らかなように、t=0で点B0、t=1で点B3を通るが、途中はその他の点を通るわけではない(tに0と1を代入してみればすぐわかる)。式-2からBezier曲線は一般にB0を始点にBnを終点にするn次の曲線となる。

図-5にB0=(-0.5,0)、B1=(0,0.7)、B2=(1,1)、B3=(1.5,0)のときの3次のBezier曲線を示す。

0930fig5.png

端点での微係数

あとで使う必要が出るので、数学をやったついでに微係数を計算しておく。 始点と終点での曲線の傾きdy/dxは、媒介変数を使った微分((dy/dt)/(dx/dt))から

0930eq6.png
となる。つまり、隣の制御点に向かう方向が、端点での接線方向になる。

おなじように2階の微係数を計算しておくと まず、媒介変数の2階の微分は

0930eq8.png
なので(あってるかな)
0930eq9.png
となる。うわあ、ほんまかいな。まあ具体的に計算してみればいい。でもそれは後回しにしよ。

このBezier曲線で、タブレットで引いた線の外形を囲って太さのある線にする。線の引きはじめと引き終わりに、ペンの形状である楕円の半分が現れるが、楕円をBezier曲線で表すにはどうするかを考えなければいけないけどもう寝ることにする。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立09/30献立10/01 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。