問題很容易。 可以說,你有功能更好的方法比如果其他如果...線性插值
double interpolate (double x);
,你必須具有已知的X->ý
例如
音符的地圖的表:實表格比較大,這只是一個例子。
所以你8將返回18 +((8-7)/(10-7))*(22-18)=我發現19.3333333
一個很酷的方式是 http://www.bnikolic.co.uk/blog/cpp-map-interp.html (長話短說它對x-> y數據對使用std :: map,key = x,value = y)。
如果有人問什麼,如果不然,如果標題 其他方式,它基本上是:
if ((x>=5) && (x<=7))
{
//interpolate
}
else
if((x>=7) && x<=10)
{
//interpolate
}
那麼,有沒有一種更聰明的方法做,或地圖的方式是藝術的狀態? :)
btw我更喜歡在C++ soutions,但顯然任何語言的解決方案,有1:1映射到C++是很好的。
在這種情況下似乎不適用,但無論如何:如果插值點的「x」值間隔相等,則可以使用模運算來查找第一個大於等於query_value值的索引時間。一些線性轉換是必要的。 – 2012-07-10 09:53:42
是的,我有意不作等距地表明我想要線性插值,但是間隔不一定相同。 – NoSenseEtAl 2012-07-10 11:49:13
儘管如此,如果在應用某些函數之後可以使間隔等距,模數方法仍然可以工作。 – 2012-07-10 11:52:16