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

C# 带步长的两个数之间的线性插值,c#,unity3d,math,C#,Unity3d,Math,我很难找到如何在两个数字之间使用定义数量的中间步骤进行线性插值 假设我想用8个中间步骤在4和22之间插值,如下所示: 很容易计算出这里是x+2。但如果起始值为5,最终值为532,中间有12个步骤,该怎么办?(在我的特殊情况下,我需要起始值和结束值之间有16个步长)如果有两个栅栏柱,并且在它们之间放置了k个栅栏柱,则创建k+1空间。例如: | | post1 post2 adding one posts creates two spaces |

我很难找到如何在两个数字之间使用定义数量的中间步骤进行线性插值

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


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

如果有两个栅栏柱,并且在它们之间放置了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

对于实际执行线性插值,请使用

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

var start=4;
var-end=22;
var距离=结束-开始;
var steps=9;//您的示例在技术上有9个步骤,而不是8个步骤
var delta=距离/步数;
请注意,这很方便地假设您的
距离是
步数的干净倍数。如果您不知道这是一种情况,并且千万不要超过这个步骤数,这一点很重要,您可能需要明确地检查它。下面是一个简单的整数示例。浮点方法可能更复杂:

如果(距离%delta>0){delta+=1;}

我不太愿意给出两个单独的答案,但我觉得这种方法与另一种方法完全不同。有一个有用的函数,它可能正是您所需要的,并被适当地调用

var start=5;
var-end=532;
var阶数=13;

对于(int i=0;i你是如何得到
x+2
?你能手工解决你的第二个例子吗?它会给@code学徒带来一些难看的东西,但是:45.53846154 86.07692308 126.6153846 167.1538462 207.6923077 248.2307692 288.7692308 329.3076923 369.84615341 410.3846154 450.9230769 491。4615385@Pouissante你想要什么?谢谢你的例子。如果步骤不是整数,我将强制转换,我不需要浮点。我实际上打算发布第二个答案,因为这是一种非常不同的方法,可能更适合您的需要。嗯,回想起来,我很难理解为什么它有9个步骤,因为我有8个数字要“发现”这取决于你把你的起始值计算为一个步骤,或者如果你认为步骤是从一个值移到另一个值的动作。MHH,回想起来,我很难弄清楚为什么它有9个步骤,因为我有8个数字来“发现”。。如果我以你的帖子为例,我只能算出我在开始和结束之间放置了7个帖子,因此k+1将是8?@Pouissant你的“步骤”实际上就是我例子中的帖子。如果你想到的是“步骤”作为帖子之间的间隔,你的新思维方式忽略了从最后一个中间帖子到最右边帖子的步骤。如果有第一步、最后一步和N个中间步骤,从第一步到最后一步(从第一步开始)意味着你需要采取(N+2)-1个步骤;+2因为N个中间步骤+1个初始步骤+1个最终步骤;-1因为假设您已经在初始步骤上,所以不需要步骤来触摸它。