SSブログ

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

先日から急に始めた、タブレットを使ってPhotoshopのブラシで描くような太さの変わる線をBezier曲線で描くソフトを作りたい、という話。前回Bezier曲線の基礎をおさらいした。今回それを使って楕円を描くにはどうするかを考える。

Bezier曲線による楕円の近似

ペン先の形状を楕円にしたので線の引きはじめと引き終わりの形状は楕円の一部になる。これもBezier曲線で表す必要があるが、楕円は3次のBezier曲線では表すことができない。なぜできないかは後で示すけど、従ってBezier曲線で近似しなければいけない。

楕円の式を

1004eq11.png
とする。図-6のような楕円の第1象限(x≥0かつy≥0)の部分をBezier曲線で近似してみる。

1004fig6.png

Bezier曲線の始点を(0,b)、終点を(a,0)と考える。端点での微係数からこれ以外の二つの制御点は

1004eq12.png
なのはあきらかである(前回やった微分の結果から)。 このBezier曲線が式-11からどのくらいずれているかを表す指標として
1004eq13.png
を考えてみる。ここでPx(t)、Py(t)はそれぞれBezier曲線P(t)のx成分とy成分である。 このΔが0なら楕円に一致しているということになる。つまり、(tの測度を除いて)最小2乗法的に近似式を求めようというわけである。

ところがこれはうまくいかない。なぜなら式-13からできる最小2乗法の式

1004eq13p.png
はx1とy2に関する4次の連立方程式になってしまう。一般的には解くことはできない。

単位円への近似

どうせ近似なので、もう少し緩い条件でやってみる。簡単のため第1象限の四分の一単位円で考えてみる。xとyに関して対称なので式-12制御点の座標は

1004eq14.png
とすることができる。 このとき
1004eq15.png
を考えてみる。制御点の値を入れてみて
1004eq16.png
これがkによってどのように変わるかを見てみる。
1004fig7.png
図-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から

1004eq17.png
とおいてみる。つまり、t=1/2のところで円に一致させる(円とBezier曲線が接する)とする。これはkの2次方程式なので解けて
1004eq19.png
となる。二つの解のうち負の解は第3象限の円弧に接する解になってしまうので正の方をとる必要がある。このときの式-16をプロットしてみると図-8のようになる。
1004fig8.png
たしかにt=1/2でδ(t)は0になっているように見える。が、それ以外の点では0になっていない(もしすべてのtについて0になるなら、Bezier曲線で円が表現できるということになる。逆に言えば恒等的に0にできないのでBezier曲線で円は描けないといえる)。このときのδ(t)は
1004eq20.png
のところで最大値
1004eq21.png
を迎える。半径1mの円をBezier曲線で近似したとき、最大で0.5mmずれがある、ということになる。

先の最小2乗法で決めるならkの値をあと0.0004ほど小さくすれば、ズレの最大は0.4mmにすることができるが、今の用途なら、まあこの近似で十分でしょう。

つぎは、これを楕円に拡張してみよう。


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

「考え中の問題」棚卸し献立10/06 ブログトップ

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