曲線全体にわたってオブジェクトの速度を一定の値に保ちたいように思えます-弧の長さを知っていてもこれを行うのに役立ちません。オブジェクトがその速度で移動している場合、オブジェクトがエンドポイントに到達する時間を計算するのに役立ちますので、現在のものよりも優れています(オブジェクトはすべてのポイント間で同じ平均速度を持ちます)が、オブジェクトの実際の速度は、曲線を移動するときに変化します。
より良い解決策は、オブジェクトの移動速度によって決まる可変レートで、パラメーターパラメーター(0から1になるパラメーターを、s
混乱を避けるために呼び出しますt = time
)に変更するds/dt
ことです。曲線上のその点。つまり、s
フレームごとに0.01ずつ変更するのではなく、フレームごとに0.005、次のフレームごとに0.02ずつ変更するなどです。
これを行うには、各フレームのx
(dx/ds
)およびy
(dy/ds
)の導関数を計算し、次に設定します
ds / dt =速度/ sqrt((dx / ds)2 +(dy / ds)2)
つまり、移動したい速度を取得s
し、一定の増分で変更する場合に実際に進行する速度で除算します。
証明
オブジェクトの速度が一定であることを望みます。その定数に名前を付けましょうspeed
。
私たちは、パラメトリック方程式のために、という2年目の計算で学ぶx(s)
とy(s)
、
速度= sqrt((dx / dt)2 +(dy / dt)2)
また、それを学びます
dx / dt = dx / ds * ds / dt (チェーンルール)
したがって、
速度= sqrt((dx / ds)2(ds / dt)2 +(dy / ds)2(ds / dt)2)
を解くとds/dt
、前述の方程式が得られます。
導関数の計算
私はそれらの特定のスプラインで働いたことがありませんが、私は、彼らはただ与え理解x(s)
とy(s)
の立方方程式の面でs
。したがって、導関数をdx/ds
簡単に見つけることができます。
x(s)= a * s 3 + b * s 2 + c * s + e
それから
dx / ds = 3a * s 2 + 2b * s + c
(に同じdy/ds
)もちろん、あなたがの正確な値を知る必要がありますa
、b
と、c
これを実行します。このページによると、これらの値は簡単に見つかります。
最後に、タイトルの質問に答えるには、パラメトリック関数のアーク長方程式を見つけるには、かなり複雑な定積分を解く必要があります。立方方程式の単純な場合でも、これは一般的にはできません。
したがって、積分を数値的に推定する必要があります。 「スプラインを10本の直線に切断し、その長さを合計する」ことは、これを行う非常に簡単な方法の1つです。ただし、より少ない線分を使用してより正確な結果を得ることができる、少し複雑な方法があります。