все. Я использую Game Maker, программу с синтаксисом, несколько похожим на Python (за исключением пробелов), для реализации интерполяции между несколькими значениями данных, как описано здесь. Представьте себе диаграмму рассеяния с x = 0 в начале координат и x = 100 в конце с одинаковым интервалом между каждым значением данных. Позиции x постоянны, но позиции y могут иметь любое значение. Если бы между каждой точкой данных были соединены линии, то в идеале скрипт смог бы найти y для данной x-позиции. Вот моя оригинальная реализация:
// 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;
Это должно было использовать lerp() после определения того, какие две точки окружают заданную позицию x, чтобы вернуть интерполяцию между их двумя значениями, но это не так, поэтому мой вопрос:
Что пошло не так и как я могу это исправить? Заранее спасибо.
Изменить: вот готовый и рабочий код:
// 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];
}
}