太さの変わるBezier曲線の生成 - その4 [考え中 - 太さの変わるBezier曲線]
先日から急に始めた、タブレットを使ってPhotoshopのブラシで描くような太さの変わる線をBezier曲線で描くソフトを作りたい、という話。前回Bezier曲線の基礎をおさらいした。今回それを使って楕円を描くにはどうするかを考える。
Bezier曲線による楕円の近似
ペン先の形状を楕円にしたので線の引きはじめと引き終わりの形状は楕円の一部になる。これもBezier曲線で表す必要があるが、楕円は3次のBezier曲線では表すことができない。なぜできないかは後で示すけど、従ってBezier曲線で近似しなければいけない。
楕円の式を
とする。図-6のような楕円の第1象限(x≥0かつy≥0)の部分をBezier曲線で近似してみる。Bezier曲線の始点を(0,b)、終点を(a,0)と考える。端点での微係数からこれ以外の二つの制御点は
なのはあきらかである(前回やった微分の結果から)。 このBezier曲線が式-11からどのくらいずれているかを表す指標として を考えてみる。ここでPx(t)、Py(t)はそれぞれBezier曲線P(t)のx成分とy成分である。 このΔが0なら楕円に一致しているということになる。つまり、(tの測度を除いて)最小2乗法的に近似式を求めようというわけである。ところがこれはうまくいかない。なぜなら式-13からできる最小2乗法の式
はx1とy2に関する4次の連立方程式になってしまう。一般的には解くことはできない。単位円への近似
どうせ近似なので、もう少し緩い条件でやってみる。簡単のため第1象限の四分の一単位円で考えてみる。xとyに関して対称なので式-12制御点の座標は
とすることができる。 このとき を考えてみる。制御点の値を入れてみて これがkによってどのように変わるかを見てみる。 図-7の右の図は式-15を、k=0、0.2、0.4、0.6、0.8、1についてプロットしたものである。赤線は近似させたい円である。また左の図は式-16を同じkの値に対してtについてプロットしたものである。これを見ると、y=xの直線の上、つまりt=1/2のところが一番円から離れていて、kが0.6よりちょっと小さいあたりで一番円に近くなっていることがわかる。ということで式-16から
とおいてみる。つまり、t=1/2のところで円に一致させる(円とBezier曲線が接する)とする。これはkの2次方程式なので解けて となる。二つの解のうち負の解は第3象限の円弧に接する解になってしまうので正の方をとる必要がある。このときの式-16をプロットしてみると図-8のようになる。 たしかにt=1/2でδ(t)は0になっているように見える。が、それ以外の点では0になっていない(もしすべてのtについて0になるなら、Bezier曲線で円が表現できるということになる。逆に言えば恒等的に0にできないのでBezier曲線で円は描けないといえる)。このときのδ(t)は のところで最大値 を迎える。半径1mの円をBezier曲線で近似したとき、最大で0.5mmずれがある、ということになる。先の最小2乗法で決めるならkの値をあと0.0004ほど小さくすれば、ズレの最大は0.4mmにすることができるが、今の用途なら、まあこの近似で十分でしょう。
つぎは、これを楕円に拡張してみよう。
2008-10-04 21:54
nice!(0)
コメント(0)
トラックバック(0)
コメント 0