Обновлено
В первом проекте этого решения вычисляются геометрические (евклидовы) расстояния, когда квестиан ссылается на Манхэттенские расстояния
.проще оптимизировать.
Для каждой группы пикселей выберите один пиксель в качестве основного.Не имеет значения, какой из них.
Для каждого другого пикселя в группе вычислите его смещение (x и y) от основного пикселя.В отличие от манхэттенского расстояния, держите знак этого смещения.
Суммируйте все смещения (смещения x и y) в один номер, назовите этот total_offsets.
Когда вам нужно расстояниеиз указанного пикселя вычислите расстояние (Манхэттен) для основного пикселя.Умножьте это на количество пикселей и добавьте total_offsets, чтобы получить общее расстояние до Манхэттена.
Шаги 1 - 3 необходимо выполнить только один раз для каждой группы, а затем шаг 4 можно выполнить по мере необходимости.
например,
Area A consists of 4 pixels: (8, 8), (8, 9), (9, 8) and (9, 9).
Declare (8, 9) as primary pixel. Offsets are
(8, 9) --> (8, 8) = (0, -1)
(8, 9) --> (9, 8) = (1, -1)
(8, 9) --> (9, 9) = (1, 0)
total_offset = 0 + -1 + 1 + -1 + 1 + 0
= 0
num_pixels = 4
To compute Manhattan distance from pixel (2, 4)
distance to primary pixel
(2, 4) --> (8, 9) = (6, 5)
= 11
dist * num_pixels + total_offsets = 11 * 4 + 0
= 44
Чтобы проверить это, мы можем рассчитать длинный путь:
(2, 4) --> (8, 8) = (6, 4)
(2, 4) --> (8, 9) = (6, 5)
(2, 4) --> (9, 8) = (7, 4)
(2, 4) --> (9, 9) = (7, 5)
distance = 6 + 4 + 6 + 5 + 7 + 4 + 7 + 5
= 44