14

以下は3次補間関数です。

public float Smooth(float start, float end, float amount)
{
    // Clamp to 0-1;
    amount = (amount > 1f) ? 1f : amount;
    amount = (amount < 0f) ? 0f : amount;

    // Cubicly adjust the amount value.
    amount = (amount * amount) * (3f - (2f * amount));

    return (start + ((end - start) * amount));
}

この関数は、0.0f〜1.0fの量を指定すると、開始値と終了値の間を3次補間します。この曲線をプロットすると、次のようになります。

期限切れのImageshack画像が削除されました

ここでの3次関数は次のとおりです。

    amount = (amount * amount) * (3f - (2f * amount));

これを調整して、2つのプロデュースタンジェントインとアウトを生成するにはどうすればよいですか?

このような曲線を作成するには:(直線の始点から立方体の終点まで)

期限切れのImageshack画像が削除されました

1つの機能として

そしてこれを別のように:(キュービックスタートからリニアエンドまで)

期限切れのImageshack画像が削除されました

誰かアイデアがありますか?前もって感謝します。

4

3 に答える 3

12

必要なのは、キュービックエルミートスプラインです。

代替テキスト

ここで、p0は始点、p1は終点、m0は始点、m1は終点です。

于 2009-07-18T01:18:31.740 に答える
3

線形補間と3次補間を使用して、2つの補間関数間を補間することができます。

すなわち。

cubic(t) = cubic interpolation
linear(t) = linear interpolation
cubic_to_linear(t) = linear(t)*t + cubic(t)*(1-t)
linear_to_cubic(t) = cubic(t)*t + linear(t)*(1-t)

ここで、tの範囲は0...1です。

于 2009-07-18T00:36:59.847 に答える
0

さて、簡単な方法はこれです:

-Expand your function by 2 x and y
-Move 1 to the left and 1 down
Example: f(x) = -2x³+3x²
g(x) = 2 * [-2((x-1)/2)³+3((x-1)/2)²] - 1

またはプログラムで(立方体の調整):

double amountsub1div2 = (amount + 1) / 2;
amount = -4 * amountsub1div2 * amountsub1div2 * amountsub1div2 + 6 * amountsub1div2 * amountsub1div2 - 1;

もう1つは、単に「移動」を省略します。

g(x) = 2 * [-2(x/2)³+3(x/2)²]

またはプログラムで(立方体の調整):

double amountdiv2 = amount / 2;
amount = -4 * amountdiv2 * amountdiv2 * amountdiv2 + 6 * amountdiv2 * amountdiv2;
于 2013-12-22T02:18:30.090 に答える