3

現在、物理学の影響を受けないオブジェクトの弾道をシミュレートしようとしています。正確には、私はロケットのような発射体を持っています。これは、Lerp を使用して、原点からターゲットまで放物線の弧を描いています。よりリアルにするために、一定の速度で移動するのではなく、クライマックスに向かって速度を落とし、戻るときに速度を上げたいと考えています。

Mathf.Smoothstep関数を使用して、他のオブジェクトで必要なこととは正反対のことを行いました。つまり、モーションのイージングとイージングです。

私の質問は次のとおりです。反転したスムーズステップを取得するにはどうすればよいですか?

私が実際に必要とするのは、スムーズステップ [ x * x*(3 - 2*x) ] への逆の数式であることがわかりましたが、正確には数学の天才ではないため、その方法がわかりません。私がオンラインの計算機から得たのは、非常に大規模な新しい機能だけでしたが、これはあまり効率的ではないと思います。

したがって、逆スムーズステップに近い関数があるかもしれませんが、計算はそれほど複雑ではありません。

これに関する任意の助けをいただければ幸いです

前もって感謝します、

トゥクス

4

4 に答える 4

3

同様の問題がありました。私にとっては、y = x で曲線をミラーリングするとうまくいきました。

ここに画像の説明を入力

したがって、実装例は次のようになります。

float Smooth(float x) {
    return x + (x - (x * x * (3.0f - 2.0f * x)));
}

この関数にはクランプがないため、x が 0 から 1 の間隔を超える可能性がある場合は、クランプを追加する必要があります。

Wolfram Alphaの例

于 2016-01-03T13:00:58.477 に答える
0

正の放物線が必要なようです。この関数のグラフを参照してください。

http://www.wolframalpha.com/input/?i=-%28x%2A2-1%29%5E2%2B1

あなたが望むことをしているように見えるグラフはどれですか: -(x*2-1)^2+1

y=0 から y=1 に移動し、 x=0 と x=1 の間で再び戻り、 x=0.5 付近の上部に少し留まります。私がそれを正しく理解していれば、それはあなたが望むものです。

wolfram alpha によると、この関数を記述する他の方法は、-(4*(x-1)*x) および (4-4*x)*x です。

それが役に立てば幸い。

于 2015-02-26T13:32:14.157 に答える