Я рассматриваю случай двухмерной (10х10) матрицы, в настоящее время заполненной нулями (в некотором смысле неактивной сетки). В какой-то момент некоторые элементы матрицы станут активными (поэтому будет присвоено значение 1).
Это происходит путем передачи списка координат (X, Y) в матрицу, которая будет активной. Порядок или какие элементы будут первыми, неизвестно. Области, которые становятся активными в матрице, могут быть такими большими, как только один элемент в матрице (1x1), или некоторые части сетки (кластеры) становятся активными в определенном c шаблоне, как в этом примере:
Для начала я могу собрать вместе соседние активные элементы и получить некоторую информацию об этом «кластере»: количество активных элементов в кластере, а также ширину строки и столбца. Например, верхний правый кластер имеет 3 активных элемента, ширину строки 2 и ширину столбца 2.
Моя цель - сопоставить эти кластеры с заранее заданными формами, идентифицированными их ID:
Имея количество активных элементов для каждого из кластеров, можно сделать первое грубое разделение на категории:
- Если один элемент активен в кластере -> Shape ID 0
- Если два элемента активны в кластере -> Shape ID 1 или 2
- Если три элемента активны в кластере -> Идентификатор формы 3 - 8
- Если в кластере активны четыре элемента -> Идентификатор формы 9 - 27
Использование второго типа информации (строка, ширина столбца кластер активных элементов), каждую категорию можно снова разделить. Принятие категории с тремя активными элементами в кластере:
- Если ширина столбца 3, а ширина строки 1 -> Идентификатор формы 5
- Если ширина столбца 2 и строка width is 2 -> Shape ID 3, 4, 6 или 7
- Если ширина столбца 1, а ширина строки 3 -> Shape ID 8
То же можно сделать для кластеров из четырех.
Следуя этой логике c, я могу решить свою проблему и назначить некоторым кластерам их правильную форму. Моя проблема возникает сейчас с фигурами, в которых информации (о количестве активных элементов, ширине их строк и столбцов) недостаточно.
Примером являются верхний правый и нижний правый кластеры на рис. 1. Здесь оба имеют 3 активных элемента, ширина столбца и строки = 2.
Как я могу разделить это еще раз и назначить правильные формы?