如何通过已知点数组插入某些数据点中的值?

lek*_*kha 2 javascript arrays linear-interpolation

我知道数据点及其值被描述为数组,speed并且power

speed = [2, 6, 8, 10, 12]
power = [200, 450, 500, 645, 820],
Run Code Online (Sandbox Code Playgroud)

我想估计与源数组(2 到 12)中未列出的速度值(例如 7)相对应的功率值。

即我正在寻找一种方法来执行插值

Yev*_*kov 5

最简单的方法是将您的功率与速度依赖性视为一组线,并假设您的目标点位于某条线的两个已知点之间,计算该值。

在此处输入图片说明

例如,您可以执行以下操作:

const speed = [2, 6, 8, 10, 12], power = [200, 450, 500, 645, 820]
		
const interpolate = (xarr, yarr, xpoint) => {
	const	xa = [...xarr].reverse().find(x => x<=xpoint),
			xb = xarr.find(x => x>= xpoint),      
			ya = yarr[xarr.indexOf(xa)],      
			yb =yarr[xarr.indexOf(xb)]  
	return yarr[xarr.indexOf(xpoint)] || ya+(xpoint-xa)*(yb-ya)/(xb-xa)
}

console.log(interpolate(speed,power,7))
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper{min-height:100%}
Run Code Online (Sandbox Code Playgroud)