问题很简单。假设你有功能
double interpolate (double x);
并且您有一个具有已知 x-> y 映射的表,
例如
5 15
7 18
10 22
注意:真实表更大 ofc,这只是示例。
所以对于 8 你会返回 18+((8-7)/(10-7))*(22-18)=19.3333333
我发现的一种很酷的方法是 http://www.bnikolic.co.uk/blog/cpp-map-interp.html (长话短说它使用 std::map, key= x, value = y for x->y数据对)。
如果有人问标题中的 if else if else 方式是什么,基本上是:
if ((x>=5) && (x<=7))
{
//interpolate
}
else
if((x>=7) && x<=10)
{
//interpolate
}
那么有没有更聪明的方法来做到这一点,或者地图方式是最先进的?:)
顺便说一句,我更喜欢 C++ 中的解决方案,但显然任何具有 1:1 映射到 C++ 的语言解决方案都很好。