2017-04-09 8 views
0

私は、曲線に沿って円弧長のパラメータ化された(すなわち等間隔の)点が必要です。私はde Casteljauとpythagorasを使ってループすることができます。これは、カーブが静的である場合に機能しますが、カーブがダイナミックであれば動きが鈍いです。また、私は3次多項式を試して、予想通りCasteljauと同じ点を与えました。ブルートフォース/ルックアップテーブルなしでベジェのアルプポイントを見つける

これらの関数をループ/配列なしで効率的にalp-pointsを得る方法はありますか?近似はうまくいきます。一般的に

float lerp(float A, float B, float C) { 
    return A*(1-C)+B*C; 
} 

float bezierPoint_lerp(float A, float B, float C, float D, float T) { 
    return lerp(lerp(lerp(A, B, T), lerp(B, C, T), T), 
       lerp(lerp(B, C, T), lerp(C, D, T), T), T); 
} 

float bezierPoint_pow(float A, float B, float C, float D, float T) { 
    return A * pow(1-T,3) + 
     B * 3 * pow(1-T,2) * T + 
     C * 3 * (1-T) * pow(T,2) + 
     D * pow(T,3); 
} 
+0

「alp points」とは何ですか? – MBo

+0

円弧長さパラメータ化/等距離点 – PrincePolka

答えて

0

あなたはアーク長をすることはできませんあなたの最善の策は、あなたがあなたの曲線を描いている間、文字通りあなたの等距離ポイントをマークしているので、象徴的曲線を再パラメータ。描画する前にカーブの長さを計算し、カーブのピクセルを画面に描画する際には、近似距離の集計を行い、「ほぼ前のものから必要な距離」の座標をヒットしたら、それ自身のリスト。カーブを完成させる間にそれを続け、最後にあなたの「alp」ポイントに含まれる座標のみの短いリストを持っています。

関連する問題