js线性内增,线性内减

64 阅读1分钟
/*
		功能:线性内插算法
		@input  输入数组
		@inSize 输入的数组大小
		@output 输出数组
		@outSize 输出数组大小
		注意:outSize > inSize
		*/
		IncSamp(input, inSize, output, outSize) {
			for (var i = 0; i < outSize - 1; i++) {
				var t = i / (outSize - 1) * (inSize - 1);
				var index = parseInt(t);
				var fraction = t - index;
				output[i] = parseInt(input[index] * (1 - fraction) + (input[index + 1] ? input[index + 1] : 0) *
					fraction);
			}
			output[outSize - 1] = input[inSize - 1];
		},
		/*
		功能:线性内减算法
		@input  输入数组
		@inSize 输入的数组大小
		@output 输出数组
		@outSize 输出数组大小
		注意:outSize < inSize
		*/
		DecSamp(input, inSize, output, outSize) {
			for (var i = 0; i < outSize; i++) {
				var t = i * (inSize - 1) / (outSize - 1);
				var index = parseInt(t);
				var fraction = t - index;
				output[i] = parseInt(input[index] * (1 - fraction) + (input[index + 1] ? input[index + 1] : 0) *
					fraction);
			}
		},
                调用
                let arr = [0, 24, 12, 0, 20, 15];
		let rawData = [];
		let rawData1 = [];
		this.IncSamp(arr, arr.length, rawData, 10);
		this.DecSamp(arr, arr.length, rawData1, 5);
		console.log(rawData); // [0,13,22,16,9,2,6,17,17,15]
		console.log(rawData1); // [0,21,6,15,15]