Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Алгоритмы > Все ямы и вершины поверхности


Автор: adasoft 07.09.02, 12:50
Ищу (думаю о) алгоритме нахождения всех ям и вершин (локальных) для некоторой поверхности представленной двухмерным массивом величиной высот точек от 0 до 255 (байт в общем)

Автор: GrAnd 08.09.02, 11:08
В таком случае придется точно определить, что есть яма и вершина ("распад" высот). Например в массиве
10 10 10 10
10  9  11 10
10 10 10 10
10 10 10 10
можно ли число 9 отнести к яме, а 11 к вершине???
А сам алгоритм можно свести к простому проходу по массиву по строчно и проверкой на ближлежащие высоты.
Например для данного случая пройдя по первой строчке мы не заметим различия в высотах. На второй строчке наткнемся на число 9 < всех остальных и предположим, что это искомая "яма". Пройдясь теперь "вверх" и "вниз" по столбцу с 9, найдем, что 9 < и остальных чисел, то есть наше предположение подтвердилось.

Другой вариант:
Находим во всем массиве среднее значение высот (обычное арифметическое). Получаем своеобразный "уровень (плоскость)" поверхности. И вычитаем его из всех высот. Часть чисел станут отрицательными - "ямы", а часть останется положительными - "вершины".

Первый способ приводит к большому количественному анализу, но довольно точен.
А второй способ приносит некоторые погрешности в точности определения. Но можно объединить их оба. ;D ;D ;D

Автор: adasoft 08.09.02, 12:39
Дадим тогда определения для (локальных) ям и вершин:
Ямой называется точка высота (относительно нуля) которой меньше всех окружающих ее точек (в количестве 8 штук).
Вершина это точка высота которой превышает высоту всех окружающих ее (8) точек.
Точки на являющиеся ямой или вершиной являются точками склонов. Одним из вариантов склонов могут быть плато - когда высоты у некоторого сообществе окружающих точек равны.

Автор: adasoft 09.09.02, 07:40
Действительно самым простым является алгоритм просмотра окружения около определенной точки, и если эта точка имеет наименьшее  (наибольшее) значение относительно окружения, то это и есть минимум (максимум).

Автор: Sanya 09.09.02, 11:58
Есть такой алгоритм - нахождение аномальных значений с кокайто базы данных (массив например). Задается степень точности. Он лучше тем, что универсальней, но требует познаний в теории вероятностей.
ЗЫ. Яма и гора - в какой-то степени аномальные значения.

Автор: Konstantin_N 10.09.02, 14:00
Математически самый быстый - градиентный спуск, но он только локальные экстремумы ищет.
Стоп... идея пришла - можно применить алгоритм быстрой сортировки и отсортировать массив значений с сохранением ссылок - и вперед.

Автор: adasoft 10.09.02, 14:38
А к чему применять сортировку? К вершинам? Так их выделить надо сначала. Простым перебором удалось найти вершины и ямы, но тут новая напасть пришла - надо определять точки перегиба, но не поверхности, а линии, точнее среза поверхности по оси y...

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)