Как раскрасить шестиугольную сетку так, чтобы у нее не было соседей одного цвета?

У меня есть приложение javascript, которое генерирует шестнадцатеричную сетку. Каждый шестиугольник имеет заостренную вершину с тремя переменными для каждой из координат куба (x, y и z). У меня также есть массив с тремя шестнадцатеричными спрайтами.

Я пробовал sprite = sprites[hex.x&3], который создает аккуратные ряды гексов. Я также пытался сместить строки в зависимости от столбца через sprite = sprites[(hex.x + hex.y&3)&3], но это не сработало. Я в настоящее время возиться с формулой с небольшим успехом.

Я точно знаю, что для этого мне нужно не менее трех спрайтов, но я не могу найти способ объединить три координаты куба, чтобы показать правильный спрайт на массиве :(


person Erik Gaius Capistrano    schedule 09.01.2019    source источник


Ответы (1)


В гексагональной сетке вам понадобятся три цвета, чтобы раскрасить каждый гекс так, чтобы он не имел того же цвета, что и соседний: Шестиугольная сетка с тремя цветами, чтобы цвета никогда не совпадали с соседними

Вы были на правильном пути с вашим решением. Вместо прибавления x+y вам нужно вычесть x-y. Другое изменение заключается в том, что &3 предназначено для манипуляций с битами; вместо этого вам понадобится %3. Однако в некоторых языках, включая Javascript, %3 может возвращать отрицательное число, поэтому вам нужно будет использовать ((___%3)+3)%3, чтобы сделать его положительным.

Идентификатор цвета/спрайта, который вам нужен, — ((x-y)%3 + 3) % 3. Я сделал интерактивную демонстрацию, чтобы проверить это.

person amitp    schedule 09.01.2019