Генерация контурных линий из регулярно расположенных данных - PullRequest
5 голосов
/ 12 марта 2009

В настоящее время я работаю над проектом визуализации данных. Моя цель - получить контурные линии, другими словами изо-линии, из данных с координатной сеткой. Данные могут быть температурой, погодными данными или любыми другими параметрами окружающей среды, но только условие это должно быть регулярно разнесено. Я искал в интернете, но не смог найти хороший алгоритм, псевдокод или исходный код для создания контурных линий из сеток. Кто-нибудь знает библиотеку, исходный код или алгоритм для создания контурных линий из данных с привязкой к сетке? будет хорошо, если ваше предложение будет иметь хорошую производительность во время выполнения, я не хочу так долго ждать моих пользователей:)

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

Ответы [ 4 ]

4 голосов
/ 13 марта 2009

См. Этот вопрос: Как приблизить векторный контур из растра высот?

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

1 голос
/ 12 марта 2009

в GNUplot есть несколько достаточно хороших контуров - если вы можете использовать код GPL, который может помочь.

0 голосов
/ 13 марта 2009

Если ваши данные размещаются через регулярные промежутки времени, это можно сделать довольно легко (если я правильно понимаю вашу проблему). Сначала вам нужно определить, на каком интервале вы хотите ваши контуры. Затем создайте сетку, которую вы собираетесь использовать для хранения информации о контуре (я предполагаю, что это просто включение / выключение или повышение прав для этого типа данных на уровне контура), который должен быть на один интервал меньше, чем исходные данные.

Теперь уловка состоит в том, чтобы сместить 2 сетки на 1/2 интервала (на самом деле не будет отображаться в коде, подобном этому, но это концепция, с которой я здесь имею дело) и сравнить 4 координаты, окружающие текущий укажите в расчетной сетке данных контура. Если какая-либо из 4 точек находится в другом диапазоне интервалов, то для этого «пикселя» в сетке контура должно быть установлено значение «истина» (или значение пересекаемого диапазона контура).

При использовании этого метода возникнет проблема, когда интервал слишком мал, что приведет к наложению друг на друга нескольких контуров.

0 голосов
/ 13 марта 2009

Как указывает ссылка от Пола Томблина, кривые Безье (которые являются подмножеством B-сплайнов) являются зрелым решением для вашей проблемы. Если производительность во время выполнения является проблемой, то кривые Безье имеют дополнительное преимущество, заключающееся в том, что их можно построить с помощью очень быстрого алгоритма де Кастельжау, а не рисовать их в соответствии с параметрическими уравнениями. На случай, если вы работаете с DirectX, он имеет библиотечную функцию для de Casteljau, но вам не должно быть сложно сделать это самостоятельно, используя 1001 веб-страницу, которая его описывает.

...