猿问

带步长的两个数字之间的线性插值

我在找出如何使用定义数量的中间步骤在两个数字之间进行线性插值时遇到了一些麻烦。

假设我想在 4 和 22 之间插入 8 个中间步骤,如下所示:示例

这里很容易算出是x+2。但是,如果起始值为 5,最终值为 532,中间有 12 个步骤呢?(在我的特殊情况下,我需要中间有 16 个步骤的起始值和结束值)


梵蒂冈之花
浏览 129回答 3
3回答

慕田峪7331174

如果你有两个栅栏柱并且在它们之间放了 k 个栅栏柱,你就创建了 k + 1 个空间。例如:|           |post1       post2      adding one posts creates two spaces|     |     |post1       post2如果您希望那些 k + 1 个空间相等,您可以将总距离除以 k + 1 以获得相邻帖子之间的距离。d = 22 - 4 = 18k = 8e = d / (k + 1) = 18 / 9 = 2在您的其他案例中,答案是d = 532 - 5 = 527k = 12e = d / (k + 1) = 527 / 13 ~ 40.5

慕斯709654

我犹豫是否要给出两个不同的答案,但我觉得这种方法与另一种方法相比非常独特。有一个有用的函数,它可能正是您所需要的,它被恰当地称为Mathf.Lerp()。var start = 5;var end = 532;var steps = 13;for (int i = 0; i <= steps; i++) {&nbsp; &nbsp; // The type conversion is necessary because both i and steps are integers&nbsp; &nbsp; var value = Mathf.Lerp(start, end, i / (float)steps);&nbsp; &nbsp; Debug.Log(value);}

温温酱

要实际进行线性插值,请使用Mathf.MoveTowards().为了计算出您的最大增量(即您希望它每一步移动的量),取差值,然后将其除以所需的步数。var start = 4;var end = 22;var distance = end - start;var steps = 9; // Your example technically has 9 steps, not 8var delta = distance / steps;请注意,这很方便地假设您distance是steps. 如果您不知道是这种情况,并且永远不要超过该步数很重要,您可能需要明确检查它。这是一个整数的粗略示例。浮点方法可能更复杂:if (distance % delta > 0) { delta += 1; }
随时随地看视频慕课网APP
我要回答