So-net無料ブログ作成

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

NSBezierPathのSmoothingのためのカテゴリの実装は昨日で終わったので、実際に描かせてみる。

Smoothingの例

実際にこのNSBezierPathのカテゴリを使ってSmoothingを行ってみた。

0526fig34.png
図-34はランダムに5点の座標を発生させ、それを直線で結んだのが黒線で、赤線が今回のメソッドで変換したもの。kvalueは1.0になっている。また青い点はNSMoveToBezierPathElement、赤い点はNSCurveToBezierPathElementの端点、グレーの点は今回生成した中間制御点を表している。パスは閉じていない。それなりにけっこう自然に見える。

図-35に正方形をSmoothingした例を示す。こっちは閉じている。

0526fig35.png
円に近く見えて、なかなかよい。

図-36に正八角形をSmoothingした例を示す。
0526fig36.png
正方形の場合と違って曲線が尖った感じになる。

一般にもとの折れ線の角度が狭い(0°に近い)とき、Smoothing後の曲線は頂点で曲率が大きくなり、開いている(180°に近い)とき、頂点間で曲率が大きくなる傾向が出てしまうけど、それはアルゴリズムから当然。開き具合によってkvalue(中間制御点の伸ばし具合)を変えるとかを考えてもいいけどシンプルさが減ってしまう。そうすることでよほどよくならない限りそういう小手先はやめたほうがいい。

図-37に不等辺だが頂点の位置は円周上にある五角形をSmoothingした例を示す。
0526fig37.png
Smothingの結果が円に近くなってくれるとうれしいがそうはならない。まあそれは高望みと言うものであろう。全体的には良く健闘していると言える。

すごく簡単なアルゴリズムで、それなりに自然に見えるSmoothingができるのは、いい。


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0