Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интерполяция поверхности, Без участия OpenGL 
:(
    Опции темы
Zakhar_Shan
Дата 22.12.2012, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2



Задача вот какая. 
В пространстве дано куча точек, располагаются черт зная как на разном расстоянии друг от друга. 
Необходимо выполнить интерполяцию, чтоб обрисовать карту (содержащею значение поверхности на регулярной сетки) и выгрузить ее в специальный формат.
У нас смеются спец. ПО, которая делает это. Позволяет использовать много алгоритмов (Global B-Spline, Local B-Spline,Converging average...), но о них кроме формул, я ничего не найду, а если и находится, то алгоритмы только для функции одной переменной. Бикубическая интерполяция дает результат только в случае одинокого шага всех точек по сетки...
У кого есть может готовые алгоритмы, без кучи формул, а то долго возиться не хочется...


Это сообщение отредактировал(а) Zakhar_Shan - 22.12.2012, 14:41
PM MAIL   Вверх
W4FhLF
Дата 22.12.2012, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
tzirechnoy
Дата 22.12.2012, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



1) Без формул -- никак, это вполне себе нетривиальная задача.
2) Кстати, в OpenGL этого тожэ нет.
3) Самое мне подходящее что я пока что видел из этого разряде -- ABOS, реализованный в SurGE. Но исходников не дают (почему-то), только описание, по которому, впрочем, вполне реально реализовать.
Но там есть довольно много ссылок, в т.ч. и на OpenSource утилиты, и на приличное введение в проблемы.
4) Для начала попробовать и что-нибудь простое. Например, присвоить каждой точке данных в каждой точке сетки вес, в зависимости от расстояния между точкой сетки и точкой данных. Уменьшающийся с расстоянием вес, разумеется. Удобно -- нелинейно уменьшающийся (ну, там пропорцыонально минус второй-третьей степени расстояния).
И затем взять среднее значение в данной точке сетки с учётом весов (т.е. сумма по всем точкам данных вес*значение, и поделить на сумму весов). Для более-менее гладких и нечастых данных нормально работает. 
PM MAIL   Вверх
baldina
Дата 22.12.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(Zakhar_Shan @  22.12.2012,  14:39 Найти цитируемый пост)
дано куча точек

Цитата(Zakhar_Shan @  22.12.2012,  14:39 Найти цитируемый пост)
выполнить интерполяцию, чтоб обрисовать карту

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

Это сообщение отредактировал(а) baldina - 22.12.2012, 23:05
PM MAIL   Вверх
Zakhar_Shan
Дата 24.12.2012, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.6.2007
Где: Тюмень

Репутация: 1
Всего: 2




Читал, только все там для функции одной переменной, а у меня x,y,z ....
Цитата

1) Без формул -- никак, это вполне себе нетривиальная задача.
2) Кстати, в OpenGL этого тожэ нет.
3) Самое мне подходящее что я пока что видел из этого разряде -- ABOS, реализованный в SurGE. Но исходников не дают (почему-то), только описание, по которому, впрочем, вполне реально реализовать.
Но там есть довольно много ссылок, в т.ч. и на OpenSource утилиты, и на приличное введение в проблемы.
4) Для начала попробовать и что-нибудь простое. Например, присвоить каждой точке данных в каждой точке сетки вес, в зависимости от расстояния между точкой сетки и точкой данных. Уменьшающийся с расстоянием вес, разумеется. Удобно -- нелинейно уменьшающийся (ну, там пропорцыонально минус второй-третьей степени расстояния).
И затем взять среднее значение в данной точке сетки с учётом весов (т.е. сумма по всем точкам данных вес*значение, и поделить на сумму весов). Для более-менее гладких и нечастых данных нормально работает. 

1) Да ни то что бы совсем без формул, просто библиотеку хочется простенькую...
2)Жаль, думал как ни будь соберусь, изучу и все мне по плечу будет....
3) Спасибо, почитаю:)
4)Это линейная интерполяция, ее тоже нашел, но вот она не гладкая совсем smile 
Цитата

...если точки определяют рельеф....

Не совсем рельеф, но что-то сходное есть, спасибо, почитаю:)

PM MAIL   Вверх
baldina
Дата 24.12.2012, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(Zakhar_Shan @  24.12.2012,  08:17 Найти цитируемый пост)
4)Это линейная интерполяция, ее тоже нашел, но вот она не гладкая совсем

от первой до второй один шаг. линейная определяется по двум точкам полиномом первой степени. квадратичная - по трем точкам полиномом второй степени и т.д.
если точки интерполировать регулярной сеткой (любым подходящим способом), на регулярной сетке можно строить поверхности желаемой гладкости (NURBS например)
PM MAIL   Вверх
Alexeis
Дата 24.12.2012, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Бикубик, насколько я знаю, делается по 4м точкам. При помощи метода наименьших квадратов строиться парабола наилучшим образом проходящая через 4 точки. Искомая же точка должна находиться между 2й и 3й точками (счет от единицы). Подставляем координаты Х в уравнение параболы и получаем Y .
 Для случая 3D сначала ведется интерполяция в одной плоскости (например XZ), затем второй (YZ) . Если же это задача графики, то интерполировать нужно не только координаты, но и нормали каждой точки. В принципе, нормаль ни чем от координат не отличается. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
tzirechnoy
Дата 24.12.2012, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
Читал, только все там для функции одной переменной, а у меня x,y,z ....


Ну, RBF по приведённой ссылке -- из того, что надо. Это последний раздел как раз. Если нужна гладкость -- то как раз, медленно, зато вполне гладко. Но шумы по-моему будут валить сходимость.

Добавлено через 2 минуты и 1 секунду
Цитата
3) Спасибо, почитаю:)


Кстати, про почитаю -- исходников-то не дают, а бинарники -- пожалуйста. Так что можно сравнительно быстро проверить, подойдёт ли этот метод.
Впрочем, если вещь не особенно отчуждаемая (не будет стоять вопросов про копирайты) -- то сравнительно просто surgef.exe использовать в своей программе. Подготовил файл с точками, запустил, получил выходной grid.

Добавлено через 3 минуты и 36 секунд
Цитата
если точки интерполировать регулярной сеткой (любым подходящим способом),


Вы, видимо, не заметили -- но топикстартер как раз и спрашывает, как точки интэрполировать регулярной сеткой.
PM MAIL   Вверх
baldina
Дата 24.12.2012, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(tzirechnoy @  24.12.2012,  17:39 Найти цитируемый пост)
Вы, видимо, не заметили -- но топикстартер как раз и спрашывает, как точки интэрполировать регулярной сеткой. 

нэмного заметил ;) речь о том, что для регулярной может быть использована нерегулярная (если например её заведомо проще строить) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1326 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.