线性插值函数
<pre><code class="language-javascript">/**
* 线性插值函数
*/
export function linearInterpolation(originalArray, scale) {
// 放大到原来的10倍长度
const enlargedLength = originalArray.length * scale; // 计算放大后的长度
const enlargedArray = []; // 新的放大后的数组
// 线性插值函数
const linearInterpolationFn = function (start, end, ratio) {
return start * (1 - ratio) + end * ratio;
};
// 对数组进行插值和放大
for (let i = 0; i &lt; enlargedLength; i++) {
const index = i / 10; // 原始数组索引位置
const lowerIndex = Math.floor(index);
const upperIndex = Math.ceil(index);
if (lowerIndex === upperIndex || upperIndex &gt;= originalArray.length) {
// 如果索引相同或超出原始数组长度,则直接取原始数组最后一个值
enlargedArray.push(originalArray[originalArray.length - 1]);
} else {
// 否则进行线性插值
const ratio = index - lowerIndex;
const interpolatedValue = linearInterpolationFn(
originalArray[lowerIndex],
originalArray[upperIndex],
ratio
);
enlargedArray.push(interpolatedValue);
}
}
return enlargedArray;
}</code></pre>