Получить границы области / зон из матрицы - PullRequest
2 голосов
/ 21 ноября 2011

Звучит для меня, у меня есть очень простая потребность: извлечь координаты зон, составляющих матрицу.

Позвольте мне привести пример. Вот некоторая матрица:

    | A | B | D | E | F | G | H | I | J |
| 1 | 0 | 0 | 0 | 2 | 2 | 2 | 4 | 4 | 4 |
| 2 | 0 | 0 | 2 | 2 | 2 | 2 | 4 | 4 | 4 |
| 3 | 0 | 0 | 2 | 2 | 2 | 3 | 3 | 4 | 4 |
| 4 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
| 5 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
| 6 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
| 7 | 1 | 0 | 0 | 0 | 1 | 1 | 3 | 0 | 4 |
| 8 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 9 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| 10| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |

И я бы хотел получить массив с границами и значением каждой зоны (без особого порядка).

Пример для верхней левой зоны:

  • значение: 0
  • границы: {A1, D1, B2, B3, 13}

Знаете ли вы какую-нибудь библиотеку, отвечающую на эту потребность, или я сам должен написать ее?

1 Ответ

1 голос
/ 21 ноября 2011

Я бы сам написал это, не уверен, что есть библиотеки.

Я бы рассмотрел каждую точку по очереди, для каждого региона. Тогда (я думаю) это должно сработать:

if (surrounding 8 squares has at least one with different region)
{
    for each 3 squares, above, below, left and right
    {
        if (less than 3 are different, and the middle is different)
        {
            is a boundry
        }
    }

    for each 3 squares, above, below
    {
        for each 3 squares, left, right
        {
            if(all 3 from outer loop and all 3 from inner loop are different)
            {
                is a boundry
            }
        }
    }

    not a boundry
}
else
{
    not a boundry
}

Обращайтесь за пределами квадратов как разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...