大家。我正在使用Game Maker,一个语法与Python类似的程序(除了间距)来实现多个数据值之间的插值,如here所述。想象一个散点图,其原点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位置之后使用lerp()来返回它们的两个值之间的插值,但它没有,所以我的问题是:
出了什么问题,如何解决?提前致谢。
编辑:这是完成且正常工作的代码:
// 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];
}
}
答案 0 :(得分:0)
你要做的是插入游戏属性的值(音量,危险等级,重力等)让我们调用你想要计算y
的变量,因为其他一些属性会发生变化(比如时间, x位置等)让我们称之为t
。
我们知道n
的价值y
点。让我们调用这些点p0
,p1
... pn-1
中的每一个,其中每个数字都是该点的index
。让我们调用这些点中的值y0
,y1
... yn-1
。
因此,对于t
的任何给定值,我们希望执行以下操作:
首先我们找到最接近t
的两个点。由于所有点均匀分布,我们知道给定点的t
值为t = index/(n-1)
,并且通过重新排序此等式,我们可以得到任何给定t的“索引”,如{{1} }。当index = t*(n-1)
与我们的某个点之间的位置不完全相同时,它将成为两个最接近的点t
和pk
的索引值之间的数字。因此,pk1
会为您提供pk = floor(index)
之前的索引,t
是下一个点。
然后我们必须找出这两个点(0到1之间的值)的接近pk1 = pk + 1
是多少,因为这决定了每个点的值在插值中的影响程度。我们称这个衡量为t
。然后是alpha
。
最后,如果alpha = (t - pk)/(pk1 - pk)
和pk
的值为pk1
和yk
,则会得到这样的插值[{1}}
yk1