Нахождение 6 ближайших точек в матрице по типу сот.

программирование игры математика алгоритм С#

скажем есть соты - матрица. соты содержат ячейки - элементы матрицы

нужно найти все окружающие соты. 6 штук.
какой алгоритм применить?

я захардкодил

_cell[i, j].renderer.material.color = Color.black;
_cell[i-1, j].renderer.material.color = Color.black;
_cell[i, j-1].renderer.material.color = Color.black;
_cell[i-1, j-1].renderer.material.color = Color.black;
_cell[i+1, j].renderer.material.color = Color.black;
_cell[i, j+1].renderer.material.color = Color.black;
_cell[i+1, j -1].renderer.material.color = Color.black;

как сделать это менее.. менее стремно. через цикл скажем. есть ли формула изменения знаков?

Примечание:
Василий Котёночкин, вы наверное не так поняли вопрос, прогнать отрицательные числа через цикл проблемы не составляет, а вот формула по которой знак должен изменятся с - на + для того чтобы обойти 6 ближайших сот, это ключевой вопрос.

вот "i"
i, i-1, i , i-1, i+1, i, i+1
ну и с J

- повторяется 2 раза + аналогично, без операции 3 раза

а скажем если точек будет не 6 а 8.. не переписывать же весь код?
была бы формула, увеличить количество итераций и по формуле круг сомкнется :)
Ответы:
в качестве функции изменяющей знак, можно использовать сигнум
функция sign есть практически во всех языках программирования
Например
i =...
j = ...
for k = 1 to 3
for m = 1 to 3
 _cell[i + sign(k-2), j + sign(m-2)] = ...
endfor
endfor
Могу предложить разделить определение соседей и действий с ними:


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.