线性插值 - 缩小线
Linear Interpolation - shrinking a line
假设我们有一个由 9 个元素组成的一维数组:
来源[0 到 8]。
使用"Linear Interpolation",我们希望将其缩小为一个较小的 4 点数组:Destination [0 到 3]。
我是这样理解算法的:
- 计算两个数组长度的比值:9/4 = 2.5
- 迭代目标坐标并找到合适的源坐标:
目的地 [0] = 0 * 2.5 = 来源 [0] -> 成功!使用这个精确值。
目的地 [1] = 1 * 2.5 = 来源 [2.5] -> 没有这样的元素!计算 Source[2] 和 Source[3] 的平均值。
目的地 [2] = 2 * 2.5 = 来源 [5] -> 成功!使用这个精确值。
目的地 [2] = 3 * 2.5 = 来源 [7.5] -> 没有这样的元素!计算Source[7]和Source[8]的平均值。
这是正确的吗?
几乎正确。 9/4 = 2.25
。 ;-)
无论如何,如果您想保留端点值,您应该将比率计算为 (9-1)/(4-1) = 2.666...(在点 0、1、2、3 之间有只有三段,因此长度等于3。同样指0...8)。
如果您没有达到准确值,请记住计算加权平均值,例如
Destination[1] = 1 * 2.667 -> (3-2.667)*Source[2] + (2.667-2)*Source[3]
这是来自等式,
y = y0(x1-x) + y1(x-x0)
在这种情况下,
x=2.66
x0=2
x1=3
y0=Source[2]
y1=Source[3]
假设我们有一个由 9 个元素组成的一维数组: 来源[0 到 8]。
使用"Linear Interpolation",我们希望将其缩小为一个较小的 4 点数组:Destination [0 到 3]。
我是这样理解算法的:
- 计算两个数组长度的比值:9/4 = 2.5
- 迭代目标坐标并找到合适的源坐标:
目的地 [0] = 0 * 2.5 = 来源 [0] -> 成功!使用这个精确值。
目的地 [1] = 1 * 2.5 = 来源 [2.5] -> 没有这样的元素!计算 Source[2] 和 Source[3] 的平均值。
目的地 [2] = 2 * 2.5 = 来源 [5] -> 成功!使用这个精确值。
目的地 [2] = 3 * 2.5 = 来源 [7.5] -> 没有这样的元素!计算Source[7]和Source[8]的平均值。
这是正确的吗?
几乎正确。 9/4 = 2.25
。 ;-)
无论如何,如果您想保留端点值,您应该将比率计算为 (9-1)/(4-1) = 2.666...(在点 0、1、2、3 之间有只有三段,因此长度等于3。同样指0...8)。
如果您没有达到准确值,请记住计算加权平均值,例如
Destination[1] = 1 * 2.667 -> (3-2.667)*Source[2] + (2.667-2)*Source[3]
这是来自等式,
y = y0(x1-x) + y1(x-x0)
在这种情况下,
x=2.66
x0=2
x1=3
y0=Source[2]
y1=Source[3]