На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Все ямы и вершины поверхности
    Ищу (думаю о) алгоритме нахождения всех ям и вершин (локальных) для некоторой поверхности представленной двухмерным массивом величиной высот точек от 0 до 255 (байт в общем)
      В таком случае придется точно определить, что есть яма и вершина ("распад" высот). Например в массиве
      10 10 10 10
      10  9  11 10
      10 10 10 10
      10 10 10 10
      можно ли число 9 отнести к яме, а 11 к вершине???
      А сам алгоритм можно свести к простому проходу по массиву по строчно и проверкой на ближлежащие высоты.
      Например для данного случая пройдя по первой строчке мы не заметим различия в высотах. На второй строчке наткнемся на число 9 < всех остальных и предположим, что это искомая "яма". Пройдясь теперь "вверх" и "вниз" по столбцу с 9, найдем, что 9 < и остальных чисел, то есть наше предположение подтвердилось.

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

      Первый способ приводит к большому количественному анализу, но довольно точен.
      А второй способ приносит некоторые погрешности в точности определения. Но можно объединить их оба. ;D ;D ;D
        Дадим тогда определения для (локальных) ям и вершин:
        Ямой называется точка высота (относительно нуля) которой меньше всех окружающих ее точек (в количестве 8 штук).
        Вершина это точка высота которой превышает высоту всех окружающих ее (8) точек.
        Точки на являющиеся ямой или вершиной являются точками склонов. Одним из вариантов склонов могут быть плато - когда высоты у некоторого сообществе окружающих точек равны.
          Действительно самым простым является алгоритм просмотра окружения около определенной точки, и если эта точка имеет наименьшее  (наибольшее) значение относительно окружения, то это и есть минимум (максимум).
            Есть такой алгоритм - нахождение аномальных значений с кокайто базы данных (массив например). Задается степень точности. Он лучше тем, что универсальней, но требует познаний в теории вероятностей.
            ЗЫ. Яма и гора - в какой-то степени аномальные значения.
              Математически самый быстый - градиентный спуск, но он только локальные экстремумы ищет.
              Стоп... идея пришла - можно применить алгоритм быстрой сортировки и отсортировать массив значений с сохранением ссылок - и вперед.
                А к чему применять сортировку? К вершинам? Так их выделить надо сначала. Простым перебором удалось найти вершины и ямы, но тут новая напасть пришла - надо определять точки перегиба, но не поверхности, а линии, точнее среза поверхности по оси y...
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0486 ]   [ 15 queries used ]   [ Generated: 27.04.24, 22:06 GMT ]