私はスプラインを持っていましたが、私は可変速度でカーブに沿ってオブジェクトを動かすことができましたが、私は一定の速度で動かしたいと思います。どのように一定の速度でスプラインに沿ってオブジェクトを移動できますか?
public static class SplineCurve {
public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {
t = Mathf.Clamp01(t);
float oneMinusT = 1f - t;
return
oneMinusT * oneMinusT * oneMinusT * p0 +
3f * oneMinusT * oneMinusT * t * p1 +
3f * oneMinusT * t * t * p2 +
t * t * t * p3;
}
public static Vector3 GetFirstDerivative (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {
t = Mathf.Clamp01(t);
float oneMinusT = 1f - t;
return
3f * oneMinusT * oneMinusT * (p1 - p0) +
6f * oneMinusT * t * (p2 - p1) +
3f * t * t * (p3 - p2);
}
}
私はこの曲線に一定のパラメータtを送信し、ポイントを取得し、そのポイントにオブジェクトを移動するが、これは私に、可変速度を与えています。私は一定のスピードで私のオブジェクトを移動したいどのように私はこれを達成することができますか?
私は特定の距離でtを解くことができる方程式はありますか?
B(t) = (1 - t)^3 * P0 + 3 * (1 - t)^2 * t * P1 + 3 * (1 - t) * t^2* P2 + t^3* P3
私はこの式を使用している
あなたは微分を計算するように、要因 'でステップ長をスケーリング(希望のスピード)/(微分のノルム) '。 – LutzL