为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
梵蒂冈之花 2022-12-04 11:14:17
我在找出如何使用定义数量的中间步骤在两个数字之间进行线性插值时遇到了一些麻烦。假设我想在 4 和 22 之间插入 8 个中间步骤,如下所示:示例这里很容易算出是x+2。但是,如果起始值为 5,最终值为 532,中间有 12 个步骤呢?(在我的特殊情况下,我需要中间有 16 个步骤的起始值和结束值)
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果你有两个栅栏柱并且在它们之间放了 k 个栅栏柱,你就创建了 k + 1 个空间。例如:


|           |

post1       post2



      adding one posts creates two spaces

|     |     |

post1       post2

如果您希望那些 k + 1 个空间相等,您可以将总距离除以 k + 1 以获得相邻帖子之间的距离。


d = 22 - 4 = 18

k = 8

e = d / (k + 1) = 18 / 9 = 2

在您的其他案例中,答案是


d = 532 - 5 = 527

k = 12

e = d / (k + 1) = 527 / 13 ~ 40.5


查看完整回答
反对 回复 2022-12-04
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我犹豫是否要给出两个不同的答案,但我觉得这种方法与另一种方法相比非常独特。有一个有用的函数,它可能正是您所需要的,它被恰当地称为Mathf.Lerp()

var start = 5;

var end = 532;

var steps = 13;

for (int i = 0; i <= steps; i++) {

    // The type conversion is necessary because both i and steps are integers

    var value = Mathf.Lerp(start, end, i / (float)steps);

    Debug.Log(value);

}


查看完整回答
反对 回复 2022-12-04
?
温温酱

TA贡献1752条经验 获得超4个赞

要实际进行线性插值,请使用Mathf.MoveTowards().

为了计算出您的最大增量(即您希望它每一步移动的量),取差值,然后将其除以所需的步数。

var start = 4;

var end = 22;

var distance = end - start;

var steps = 9; // Your example technically has 9 steps, not 8

var delta = distance / steps;

请注意,这很方便地假设您distance是steps. 如果您不知道是这种情况,并且永远不要超过该步数很重要,您可能需要明确检查它。这是一个整数的粗略示例。浮点方法可能更复杂:


if (distance % delta > 0) { delta += 1; }


查看完整回答
反对 回复 2022-12-04
  • 3 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号