Бикубическая интерполяция для нерегулярных сеток?
Я работаю над проектом, в котором у меня есть набор известных измерений (x,y,z,a) и вход (z,a). Мне нужно иметь возможность интерполировать (x,y,z), чтобы я мог получить список возможных (x,y) координат из заданного z.
Я смотрел на бикубическую интерполяцию, но я могу найти только примеры, относящиеся к регулярным сеткам, и мои (x,y) пары наверняка не являются регулярными.
В основном я ищу некоторые рекомендации по алгоритмам / моделям для достижения этой цели. Я рассматриваю триангулированную нерегулярную сеть, которая привлекательна, потому что она разбивается на плоскости, которые легко определить (x,y) из заданного Z. Но я хотел бы немного больше изящества.
Я знаю, это звучит как домашнее задание, это не так.
Эффективность не является проблемой.
Спасибо!
2 ответа
Я фактически использовал триангуляцию Делоне, чтобы разбить поля на 3-мерные поверхности X,Y,Z с Идентификатором. Затем, учитывая набор пар (Identity,Z), я формирую линию поля от каждой поверхности, и из этих линий вычисляем многоугольник, образованный из самых коротких ребер между линиями. Это дает мне область потенциальных координат x,y.
Посмотрите на Kd-дерево. Сначала они получают набор рассеянных точек в 2d или 3d или 10d, а затем отвечают на вопросы типа "найди 3 точки, ближайших к P".
Ваши запросы z a
пары? Например, учитывая кучу цветных булавок на карте, таблицу x y size color
можно поставить все [x y]
в дерево кд, затем попросите булавки рядом с данным x0 y0
,
Или можно поставить все [size color[
в дереве, затем попросите булавки с аналогичным размером и цветом.
(Обратите внимание, что большинство реализаций дерева kd используют евклидову метрику, поэтому sqrt( (size - size2)^2 + (color - color2)^2) должно иметь смысл.)
В Python я настоятельно рекомендую scipy.spatial.cKDTree.
Смотрите также ТАК вопросы / с тегом / kdtree.