1

みんな。ここで説明されているように、複数のデータ値間の補間を実装するために (間隔を除いて) Python にいくぶん似た構文を持つプログラムである Game Maker を使用しています。原点が x = 0、末尾が x = 100 で、各データ値の間隔が等しい散布図を想像してください。x 位置は一定ですが、y 位置は任意の値を持つことができます。各データ ポイント間で線が接続されている場合、理想的には、スクリプトは特定の x 位置の y を見つけることができます。これが私の元の実装でした:

// This is executed once.

nums = 3; // the number of values to interpolate between
t = 0; // the position along the "scatterplot" of values

// Values may be decimals with any sign.  There should be values >= nums.
ind[0] = 100;
ind[1] = 0;
ind[2] = 100;

//This is executed each step.

intervals = 100 / (nums - 1);
index = round(percent / intervals);
if percent != 0 {newpercent=  (intervals / (percent - index)) / 100;}
else {newpercent = 0;}
newval = ind[index] * (1 - newpercent) + ind[index + 1] * newpercent;

これは、指定された x 位置を囲む 2 つのポイントを見つけた後に lerp() を使用して、2 つの値の間の補間を返す必要がありましたが、そうではなかったので、私の質問は次のとおり
です。 前もって感謝します。

編集:完成した作業コードは次のとおりです。

// This is executed once.

nums = 3; // the number of values to interpolate between
t = 0; // the position along the "scatterplot" of values

// Values may be decimals with any sign.  There should be values >= nums.
ind[0] = 100;
ind[1] = 0;
ind[2] = 100;

// This is executed each step; setting the result to 'alpha'.

if (nums > 1) {
    if (t != 1) {
        _temp1 = 1 / (nums - 1);
        _temp2 = floor(t / _temp1);
        _temp3 = (t - (_temp1 * _temp2)) * (nums - 1);
        alpha = ind[_temp2] + _temp3 * (ind[_temp2 + 1] - ind[_temp2]);
    }
    else {
        alpha = ind[nums - 1];
    }
}
4

1 に答える 1

0

やりたいことは、ゲームのプロパティの値 (音量、危険レベル、重力など) を補間することです。計算したい変数を呼び出して、y他のプロパティの変化 (時間、x 位置など) を呼び出しましょう。それt

の値がnわかるポイントがありますyp0これらの各ポイントを, p1...と呼びましょう。pn-1ここで、各番号はindexそのポイントの です。これらのポイントの値を呼び出しましょうy0, y1.... yn-1したがって、 の任意の値に対してt、次のことを行います。

まず、 に最も近い 2 つの点を見つけますt。すべてのポイントが均等に配置されているtため、特定のポイントの の値は であることがわかり、t = index/(n-1)この式を並べ替えることで、任意の t の「インデックス」を取得できますindex = t*(n-1)。がポイントの 1 つと正確に同じ位置にない場合t、最も近い 2 つのポイントpkとのインデックス値の間の数値になりpk1ます。それでpk = floor(index)、あなたの前のインデックスを取得しtpk1 = pk + 1次のポイントです。

次に、これらの 2 つのポイント (0 と 1 の間の値) のそれぞれにどれだけ近いかを調べる必要がありますt。これにより、各ポイントからの値が補間でどれだけ影響を受けるかが決まります。この測定値を としましょうalpha。それからalpha = (t - pk)/(pk1 - pk)

最後に、pkpk1ykあり、このようなyk1補間値を取得する場合y

y = (1-alpha)*yk + alpha*yk1;
于 2013-08-29T11:16:53.393 に答える