Интерполяция разрозненных данных: что я мог сделать?

Я работаю над трехмерной диаграммой на Java, используя Java 3D. Он должен иметь возможность отображать кучу измеренных значений. Измеренные данные, которые я получаю, разбросаны. Это означает, что мне придется интерполировать недостающие точки, чтобы хорошо отобразить мою поверхность.

Я еще не изучал всю эту трехмерную геометрию и не знаю, с чего начать. Моя идея состоит в том, чтобы триангулировать точки на поверхности, а затем, на основе триангуляции, интерполировать недостающие точки. (см. это, чтобы иметь приблизительное представление о том, что хочу добиться)

Есть ли у кого-то опыт интерполяции разрозненных данных? Правилен ли мой подход? Если да, какие структуры данных и алгоритмы мне понадобятся для триангуляции моего облака точек?


person Simon    schedule 25.05.2010    source источник


Ответы (3)


Триангуляция выполняется очень быстро, если вам нужно выполнить большое количество интерполяций на большом наборе нерегулярных данных, например, при контурировании поверхности земли. Интерполяция является линейной и дискретной, основанной исключительно на трех точках треугольника, в котором вы интерполируете. In также поддерживает ограничения, такие как линии разрыва, например. подумайте о поверхности земли, определяемой точками, которая включает в себя линию, определяющую гребень или утес.

Сплайны дают более плавный результат для всех входных данных, но могут быть очень медленными на больших наборах данных и могут давать необычные результаты на плохо разнесенных данных. Вы также можете найти NURBS (тип сплайновой поверхности) и патчи Безье.

person SmacL    schedule 25.05.2010
comment
Спасибо за ваши подсказки. Существуют ли какие-либо бесплатные API, способные это сделать? Мне нужно не только отображать интерполированную поверхность. Мне нужны интерполированные точки поверхности в памяти, чтобы я мог передать их на свой плоттер, который может отображать только функции, для которых определены любые значения x, y, z для каждой точки сетки. - person Simon; 25.05.2010
comment
Для триангуляции в Java попробуйте cs.bgu .ac.il/~benmoshe/DT/ Поиск в Google триангуляции Java также дает множество результатов. Я сам разбираюсь в С++, поэтому не могу комментировать, насколько хороши или плохи какие-либо из этих реализаций. - person SmacL; 25.05.2010

Если вы не хотите обременять себя триангуляцией, вы можете посмотреть кригинг или радиальная базисная интерполяция.

person Alexandre C.    schedule 19.09.2010

Вам нужно использовать функцию интерполяции, в основном она принимает ваши точки данных в качестве входных данных и возвращает значение z для любого (x, y).

Например, вы можете использовать сплайн-интерполяцию, как это реализовано в математика Apache Commons

person Guillaume    schedule 25.05.2010
comment
+1: Спасибо, что рассказали мне о существовании Java Math API :) - person Simon; 25.05.2010
comment
не думайте, что сплайн-интерполяция работает для чего-то более одного измерения. - person fodon; 21.04.2013
comment
Существует реализация интерполяция бикубических сплайнов в проекте apache maths - person Guillaume; 26.04.2013