0
我嘗試使用特徵庫來創建樣條曲線。但是,一旦我創建一個樣條,我不知道如何獲得在給定點x處的值。特徵樣條插值 - 如何在任意點x處獲取樣條y值?
參見下面的例子與我的意圖的解釋:
#include <Eigen/Core>
#include <unsupported/Eigen/Splines>
int main(int argc, char const* argv[])
{
// points at (0,0) (15,12) and (30,17)
Eigen::MatrixXd points(2, 3);
points << 0, 15, 30,
0, 12, 17;
typedef Eigen::Spline<double, 2> spline2d;
spline2d s = Eigen::SplineFitting<spline2d>::Interpolate(points, 2);
// I now have a spline called s.
// I want to do something like:
double x = 12.34;
double new_y = s(x)[1]; // However this s() function uses a chord value. What is a chord value?
// Is there a:
double new_y2 = s.eval(x)
}
看起來不錯,感謝 – windenergy
@Wintermute感謝這個答案,我發現谷歌搜索時花鍵支持本徵的。然而,我不明白爲什麼Eigen的樣條插值不會給出與C中普通的Vanilla自然樣條代碼相同的結果。另外,我不明白爲什麼值縮放是必要的:我嘗試使用未縮放的值並且插值似乎可行,但仍與普通香草數字接收器不同C代碼 – volatile
@volatile Eigen Splines模塊使用B樣條(鏈接到[documentation](http://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1Spline.html))。所需的數值縮放可能是這樣的僞影;我不得不去挖掘細節。在任何情況下,如果沒有插入僞造值。例如,你會發現,如果你用上面的代碼中的scaled_value替換了return x;,s(30)變成了-496.714而不是'17'。 – Wintermute