2011年12月5日月曜日

bezier曲線

ベジェ曲線をいろんな太さので、チューブとして物質化(曲げ木で)
したいという願いのもと、スクリプトを書いていました。
さて、ベジェ曲線の定義はwikipedia等にある通り、バーンスタイン基底関数
を用いたものです。
wikipedia (ベジョ曲線)
でこれをスクリプトに落とし込むわけですが、4次のベジェ曲線とか5次とか
具体的な次元のベジェ曲線ではなくn次のベジェ曲線を定義するにはどのような
アルゴリズムがいいでしょうか?
ベジェ曲線は多項式で書かれているので再帰的定義が使えそうです。
さらにバーンスタイン基底関数は2項係数にt^i(1-t)^n-iをかけたものです。
(^は累乗)2項係数はパスカルの三角形で有名で、再帰的定義が容易に可能です。
2項定理(wikipedia)
具体的には、wikipediaにあるように、c[n,k]:=c[n-1,k-1]+c[n-1,k]と定義できます。
しかし、ここで注意したいのはスクリプトに落とし込む際は必ず、nが定数の場合を
定義しないと行けません。プログラムが停止しなくなります。なので

c[n_, 0] := 1; c[k_, k_] := 1;を加えて定義します。
そして、さらにここで説明を端折りますが、残りのt項とΣを考慮して計算すると、
bezier曲線は以下の写真のようにmathematicaで定義できます。

これでn次のベジェ曲線が数行で簡単に定義できました。
余談ですが、ベジェ曲線同士の交点をどうやって求めるか
というのは数学的にはdeterministic(決定論的)に解けない
らしいです。だからベジェ曲線の幾何的特性を生かして再帰的に
解くという論文がありました。もしかしたらいずれつかうかもしれない
ため、メモ
東京大学の先生の論文でした。

0 件のコメント:

コメントを投稿

ラベル

フォロワー

ラベル

自己紹介

自分の写真
数学ともの造りに興味があります。 電子工作とかもします。 Key ward : digitalfabrication, cellular automata

ラベル