太さの変わるBezier曲線の生成 - その3 [考え中 - 太さの変わるBezier曲線]
先に進める前に、このへんで数学を整理しておく。
NSBezierPathの数学
Bezier曲線の基礎
Cocoaで曲線を描画するときはNSBezierPathを使う。これは3次のBezier(ベジエ)曲線で、定義をWikipediaから(添字の範囲をちょっと変更して)引き写すとBezier曲線P(t)は、媒介変数tが0≤t ≤1の範囲で定義された
である。ここで、B0、B1...Bnは、n+1個の制御点の座標で、Jni(t)は のような関数である(バーンスタイン基底関数、ブレンディング関数ともいうらしい)。nCiは2項係数で である。制御点の数が四つの場合、3次曲線になってこれを3次のBezier曲線と呼ぶ。3次の場合の具体的な式を書くと
となる。この式から明らかなように、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曲線を示す。
端点での微係数
あとで使う必要が出るので、数学をやったついでに微係数を計算しておく。 始点と終点での曲線の傾きdy/dxは、媒介変数を使った微分((dy/dt)/(dx/dt))から
となる。つまり、隣の制御点に向かう方向が、端点での接線方向になる。おなじように2階の微係数を計算しておくと まず、媒介変数の2階の微分は
なので(あってるかな) となる。うわあ、ほんまかいな。まあ具体的に計算してみればいい。でもそれは後回しにしよ。このBezier曲線で、タブレットで引いた線の外形を囲って太さのある線にする。線の引きはじめと引き終わりに、ペンの形状である楕円の半分が現れるが、楕円をBezier曲線で表すにはどうするかを考えなければいけないけどもう寝ることにする。
2008-09-30 23:46
nice!(0)
コメント(0)
トラックバック(0)
コメント 0