Ось контурна карта, для якої доступні всі багатокутники рівнів.
Дозвольте запитати, як згладити багатокутники, зберігаючи всі вершини, що зберігаються у їх точних місцях?
Дійсно контур зроблений поверх даних сітки, ви можете запропонувати потім згладити дані сітки, а отже, контур буде плавнішим. Зауважте, що це не працює як моє бажання, оскільки функція згладжування, така як фільтр Гаусса, видалить невеликі пакети даних і змінить діапазон третьої змінної, наприклад, висоту, яка не дозволена в моєму застосуванні.
Насправді я шукаю фрагмент коду (бажано, в Python ), який може згладжувати 2D багатокутники (будь-якого типу: опуклі, увігнуті, самопересічні тощо) досить безболісно (забути сторінки кодів) та точним.
FYI, в ArcGIS є функція, яка робить це ідеально, але використання сторонніх комерційних додатків не є моїм вибором для цього питання.
1)
Scipy.interpolate:
Як ви бачите, отримані сплайни (червоні) є незадовільними!
2)
Ось результат за допомогою коду, наведеного тут . Це не добре працює!
3)
Для мене найкращим рішенням має бути щось на зразок наступного малюнка, на якому квадрат поступово розгладжується, змінюючи лише одне значення. Я сподіваюся на подібну концепцію згладжування будь-якої форми багатокутників.
Задоволення умови, що сплайн передає точки:
4)
Ось моя реалізація "ідеї шубера", рядок за рядком в Python за його даними. Можливо, є деякі помилки, оскільки результати не гарні.
K = 2 - це катастрофа, і тому k> = 4.
5)
Я усунув одну точку в проблемному місці, і отриманий сплайнер тепер ідентичний похоротному. Але все ж питання, чому метод працює не у всіх випадках?
6)
Гарне вирівнювання даних whuber може бути таким (малюється програмним забезпеченням векторної графіки), в якому плавно додано додаткову точку (порівняйте з оновленням
4):
7)
Перегляньте результат від Python-версії коду whuber для деяких знакових фігур:
Зауважте, що метод, здається, не працює для поліліній. Для кутової полілінії (контуру) зелений колір - це те, що я хочу, але отримав червоний колір. Це потрібно вирішити, оскільки контурні карти завжди є полілініями, хоча закриті полілінії можна розглядати як багатокутники, як у моїх прикладах. Також не те, що проблема, що виникла в оновленні 4, ще не була вирішена.
8) [мій останній]
Ось остаточне рішення (не ідеальне!):
Пам’ятайте, що вам доведеться щось зробити в районі, вказаному зірками. Можливо, в моєму коді є помилка або запропонований метод потребує подальшої розробки для розгляду всіх ситуацій та забезпечення бажаних результатів.