3次のベジェから2次のベジェ(B-Spline)に変換
FlashのSWF書き出しの覚書2
FlashのSWFでは3次のベジェが使えないため、表題のごとく
3次のベジェから2次のベジェ(B-Spline)に変換
する必要があります。
で、WEBを探したのですが正しい方法が見つからず、ひとまず適当な変換を大急ぎ(約1時間)で実装し、やれやれと思ってたところ。。。ふとSWFの仕様書をよく読んだら、変換の仕方について書いてありました
(T_T)
詳しくはこちらをご覧下さい(英語です)
http://steve.hollasch.net/cgindex/curves/cbez-quadspline.html
大まかに説明すると、
1.3次のベジェC1の2本のコントロールの交点を2次のベジェのコントロールとして曲線C2を作る。
2.C2が、元の曲線C1を十分に近似できているか評価する
3.近似できていない場合は、元のC1をさらに二つに分割して、それぞれを再帰的に1の処理に当てはめる
というようなところでしょうか。評価の方式としては、C1の中点と、C2の中点の距離をチェックする方式を推奨しているようです。
私の実装は、面倒なので自動で2分割してました(ある問題があった時だけ再帰的に分割しています)
惜しいのですが、必要以上に点数が増えるので、改めて実装しなおそうと思います。
■追記
http://developer.apple.com/textfonts/TTRefMan/RM08/appendixE.html
にはもっとはるかに詳しく書いてありました
~・~・~・~・
ちなみに2次から3次の数学的に正しく変換できるようです。
SWFの仕様書によると、2次のコントロールポイントを2/3の長さに切って二つに分ければ、良いだけのようです。
2月 14, 2007 Java, SWF書き出し | Permalink
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/130974/13910560
この記事へのトラックバック一覧です: 3次のベジェから2次のベジェ(B-Spline)に変換:

コメント