Интерполировать произвольное количество точек на двумерной плоскостиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Интерполировать произвольное количество точек на двумерной плоскости

Сообщение Anonymous »

При наличии матрицы произвольного размера и списка точек произвольной длины, и каждая точка имеет x и y, указывающие местоположение, и значение - как вы можете интерполировать значения во всей матрице?
Например, матрица 3x3 и список точек:

Код: Выделить всё

# x, y, value
points = [(0,0,0), (2,0,0), (0,2,3), (2,1,1.5)]
Матричная двойная интерполяция (Вопросительные знаки обозначают места, где следует выполнить интерполяцию):

Код: Выделить всё

0, ?,   0,
?, ?, 1.5,
3, ?,   ?,
Ожидается после интерполяции:

Код: Выделить всё

0,     0,   0,
1.5, 1.5, 1.5,
3,     3,   3,
Как это можно сделать с помощью C# или C++?
Я попробовал библиотеку libInterpolate, но он не поддерживает произвольное количество точек:

Формат данных интерполятора не поддерживается. Контейнеры данных
x, y и z должны иметь одинаковую длину или длина контейнера z
должна быть равна произведению длин контейнеров
x и y. .

Код: Выделить всё

_2D::BilinearInterpolator interp;
vector X = { 0, 2, };
vector Y = { 0, 1, 2, };
vector Z = { 0, 0, 3, 1.5, };
interp.setData(X.begin(), X.end(), Y.begin(), Y.end(), Z.begin(), Z.end());
Я искал в opencv, который содержит множество функций, но не нашел ничего подходящего. Я искал в Math.NET Numerics и там тоже не нашел.
Я знаю, что в scipy.interpolate есть функция Griddata, но это очень медленно, и я не хочу использовать scipy.

Подробнее здесь: https://stackoverflow.com/questions/785 ... a-2d-plane
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»