« FlashPlayer10のVectorクラスって | メイン | Airでクリップボードランチャを作ってみました »

2008年6月10日

[ActionScript] Catmull-Rom 補間

スプライン補間があんまり混雑な計算になってしまうので
いろいろ探してたら「Catmull-Rom 補間」なるものを知りました。

function CatmullRom(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number
{
    var v0:Number = (p2 - p0) / 2;
    var v1:Number = (p3 - p1) / 2;
    var t2:Number = t * t;
    var t3:Number = t2 * t;
    return (2 * p1 - 2 * p2 + v0 + v1) * t3 + 
        ( -3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
t には 0.0 から 1.0 の係数が入ります。
p0 から p3 間にある点、p1、p2を通過する曲線を求めます。
得られる値は p1 から p2 までです。
Processing の curve() といっしょ。(←不確かですが...)

ただ Graphics.curveTo() で描くのはちょっと難しいっぽいです。
角っこがポコってなる。
3次ベジェをきっちり定義できれば curveTo() も使えるかも。

デモ(開曲線)


デモ(閉曲線)



参考 : http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html

トラックバック(0)

このブログ記事を参照しているブログ一覧: Catmull-Rom 補間

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/501

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。