ほとんどのパラメトリック軌道について、この問題の解を近似することが可能です。アイデアは次のとおりです。カーブを十分にズームすると、そのポイントでの接線からカーブ自体を見分けることはできません。
この仮定を行うことにより、事前計算何も(立方ベジェ曲線のために3つ以上のベクトルへの必要はありませんなど)。
したがって、曲線、点でその接線ベクトルを計算します。このベクトルのノルムはであるため、期間移動距離はとして近似できます。したがって、距離は期間ます。M(t )dMdtt∥ DMdT∥Δ トン∥ DMdT∥はΔ TLL ÷ ∥ DMdT∥
アプリケーション:二次ベジェ曲線
ベジェ曲線の制御点が、および場合、軌跡は次のように表現できます。ABC
M(t )= (1 − t )2A + 2 t (1 − t )B + t2C= t2(A − 2 B + C)+ t (− 2 A + 2 B )+ A
したがって、導関数は次のとおりです。
dMdt= t (2 A − 4 B + 2 C)+ (− 2 A + 2 B )
ベクトルおよびどこかに保存するだけです。次に、与えられたについて、長さ前進したい場合、次のようにします。v⃗ 1= 2 A − 4 B + 2 Cv⃗ 2= − 2 A + 2 BtL
t = t + LLのE N GT H (T ⋅ V⃗ 1+ v⃗ 2)
立方ベジェ曲線
同じ推論が、4つの制御点、、、およびを持つ曲線にも適用されます。ABCD
M(t )= (1 − t )3A + 3 t (1 − t )2B+3t2(1−t)C+t3D=t3(−A+3B−3C+D)+t2(3A−6B+3C)+t(−3A+3B)+A
導関数は次のとおりです。
dMdt= t2(− 3 A + 9 B − 9C+ 3 D )+ t (6 A − 12 B + 6C)+ (− 3 A + 3 B )
3つのベクトルを事前計算します。
v⃗ 1v⃗ 2v⃗ 3=−3A+9B−9C+3D=6A−12B+6C=−3A+3B
最終的な式は次のとおりです。
t=t+Llength(t2⋅v⃗ 1+t⋅v⃗ 2+v⃗ 3)
精度の問題
妥当なフレームレートで実行している場合、(フレーム期間に応じて計算する必要があります)は近似が機能するために十分に小さくなります。L
ただし、極端な場合は不正確になる場合があります。が大きすぎる場合、たとえば10個のパーツを使用して、区分的に計算を実行できます。L
for (int i = 0; i < 10; i++)
t = t + (L / 10) / length(t * v1 + v2);