Pull to refresh

Comments 13

> При использовании сплайн интерполяции (Рисунок 3), линия получается не прямой, так как принимается во внимание информация о положении крайних точек.

На самом деле сплайн строится таким образом, чтобы стыковать (согласовывать) два соседних сегмента кривой по производным первого и/или более высогого порядков. Т.е. используется информация не о крайних точках (если имелись в виду концы изолинии; и, кстати, у изолинии в общем случае нет крайних точек), а о точках, разделяющих два соседних сегмента кривой. Исходя из этого, корректнее было написать «т.к. сегмент кривой строится по информации об ограничивающих его узлах».
Очень интересно послушать про «качественный и простой алгоритм получения равномерной сетки». Я в свое время тоже решал задачу восстановления 3д модели рельефа по изолиниям. Правда у меня сеточная функция была конечной целью.
Недавно попробовал тот же алгоритм для решения задачи построение цветовых градиентов (вот здесь есть старые примеры habrahabr.ru/qa/3135/) — получилось очень даже неплохо. Сделал на основании него рисовалку для андроида — дети в восторге :)
Могут ли Ваши алгоритмы справится с многомерной структурой? например нависающий утес, или система пещер?
Однозначно нет, для этого надо использовать, скажем, фрактальные алгоритмы. При этом надо иметь данные для такой генерации (для одной точки сопоставлено несколько высот, еще и объемы). В рамках работы обрабатывались картографические данные, а они все обеспечивают одну высоту для географической точки.

Когда решал данную задачу, читал о способах работы с многомерными структурами, там много особенностей. Да и получить данные для генерации таких карт достаточно сложно. В открытом доступе я таких не видал (для реального ландшафта, хотя бы площадью с Францию).
SRTM не подходит?
Еще по методам интерполяции — такие алгоритмы как Кригинг, триангуляция не подошли?
Переход к регулярной сетке (по сути растру) и построение изолиний как независимая задача общепрниняты. Неужели открытого кода не нашлось?
Отвечу за себя. Кригинг работает с точечными высотными отметками, а не изолиниями. Триангуляция же дает плоское плато в т.н. «карманах». Я (не автор статьи, ссылка на статью с иллюстрацией результатов есть выше в моем комментарии) использовал оригинальный статистический алгоритм, который работает с изолиниями именно как с линиями. Это дает множество плюсов. Во-первых качество дискретизации изолинии (количество точек, формирующих ломанную изолинии) качественно не влияет на результат. Во-вторых сеточная функция при «подходе» к линии изолинии принимает значение близкое к высоте изолинии. В-третьих — полное отсутствие плато, свойственное алгоритмам на основе триангуляции. Ну и кроме того алгоритм имеет очень хорошую асимптотическую сложность (линейный относительно произведения размерности сетки и количества изолиний).
Интересные ссылки. Спасибо.
У меня в прошлом опыт работы с композитными иисходными данными в 3Д картах — ESRI 3D analyst и в последствии собственный модуль Isoliner isoliner.geoblogspot.com/Home/features
Кригинг не предполагает данных именно в точках — просто так реализован в приложениях
Триангуляция может быть реализована довольно хитро — линия может быть мягкой или жесткой границей, данные могут постепенно добавляться в модель. А по результатам согласен — сначала плоские вершины, и на втором шаге часто приходится добавлять данные. Для земной поверхности есть специфика — гидрологическая корректность. Получается, что, например, изолинии рельефа нельзя рассматривать отдельно от рек.
Я особо не вдавался в эмпирические тонкости построения рельефа. Но разве требования к алгоритму «с одной стороны изолинии — выше, с другой — ниже» не достаточно для того, чтобы соблюсти гидрологическую корректность? В смысле, если долина реки нормально описана изолиниями — то модель с указанным свойством не будет корректна?
Да, как раз будут искажения. К примеру, делалась программа управления судами для системы каналов (Волгодон). Суда просто застревали при физическом моделировании с рельефом без учета глубин каналов ближе к краям. Канал настолько узкий, что при классической интерполяции, получается неверный рельеф. Нужно вручную достраивать изолинии или же брать в расчет «речную» составляющую.
Согласен с VaiMR по искуственным сооружениям.
Добавлю по природным объектам:
изолиния пересекает реку один раз (вода течет вниз)

На практике приходится добавлять русло как объект с «изломом»
Представляете себе точность дна белого моря с шагом в 5 метров? Какой объем данных будет при использовании триангуляции? Ко всему прочему требовалось получать непрерывность второй производной на стыках, для физического моделирования. Физика очень точная, обычная триангуляция не дает такого качества поверхности.
Зависит от исходных данных.
Изолинии — все таки вторичная информация — собственно батиметрические данные изначально точечные и связаны с ходами. Расстояние между профилями как правило значительно больше чем между точками профиля. Собственно, именно гидрография — довольно серьезная наука со своим набором методов построения. По моему опыту для службы обеспечения судоходства больше подошла триангуляция. Там очень сильно влияют линии уреза воды (уже цифровка космосъемки) и данные по бьефам плотин и береговых сооружений — вертикальные стенки. Производные как раз определяются типом данных — разрыв, излом, гладкая поперек линии, минимум, максимум…
Тут немного разные задачи. Географическая модель поверхности z=f(x,y) не предполагает многозначности высот в одной точке. То что вы хотите, требует уже другой геометрической модели. Алгоритмы здесь уже вторичны. Кроме классической триангуляции поверхности, можно использовать например воксели или твердотельное моделирование. А вообще тема богатая :)
Sign up to leave a comment.

Articles