Похоже, вы пытаетесь создать полигональное представление границы возвышенности.
Если вы работаете с растровыми данными (сэмплированными по прямоугольной сетке), попробуйте это.
Думайте о вашей сетке как о совокупности прямоугольных треугольников.
Скажему вас есть сетка очков 3x3
Ваши треугольники:
- abd часть прямоугольника abed
- bde другая часть прямоугольника abed
- bef часть прямоугольника bcfe
- cef другая часть прямоугольника bcfe
- dge ... и т. Д.
Ваш алгоритм имеет следующие шаги.
Создайте список треугольников, которые находятся выше порога высот.
Возьмите объединение этих треугольников, чтобы сделать многоугольную область.
Определите границу многоугольника.
Если необходимо, сгладьте границу многоугольника, чтобы ваш слой выглядел нормально при отображении.
Если вы пытаетесь создать красивый конлинии обхода, шаг 4 очень трудно направо.
Шаг 1 является ключом к этой проблеме.
Для каждого треугольника, если все три вершины выше порога, включите весь треугольникв вашем списке.Если все ниже, забудьте о треугольнике.Если некоторые вершины находятся выше, а другие ниже, разделите ваш треугольник на три, добавив новые вершины, которые лежат точно на линии возвышения (путем интерполяции возвышения).Включите один или два из этих новых треугольников в свой список высокогорья.
Для остальных этапов вам понадобится приличная библиотека 2d обработки геометрии.
Если ваши точки не находятся на регулярной сетке, начните с использования алгоритма Делоне (который вы можете посмотреть), чтобы организовать ваши точки в треугольники.Затем следуйте тому же алгоритму, который я упоминал выше.Предупреждение.Это будет выглядеть отрывочно, если у вас мало очков.