Подтвердить что ты не робот

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

Мы имеем гексагональную латиницу:

 _   _   _
/ \_/ \_/ \_ 
\_/ \_/ \_/ \ 
/ \_/ \_/ \_/
\_/ \_/ \_/

Каков наилучший способ представить его с помощью двумерного массива или любого другого

4b9b3361

Ответ 1

Самый простой способ представить шестнадцатеричную сетку с 2D-массивом - это перекос ваших осей: каждая строка гексов смещена на полшага больше, чем предыдущая. Не имеет значения, смещена ли каждая строка вперед или назад, если вы согласны с этим; ниже, каждая последующая строка смещена на половину шестнадцатеричного вперед:

(0,0) (0,1) (0,2) (0,3) (0,4)

   (1,0) (1,1) (1,2) (1,3) (1,4)

      (2,0) (2,1) (2,2) (2,3) (2,4)

         (3,0) (3,1) (3,2) (3,3) (3,4)

Легко определить ближайших соседей любого заданного гексагона: в приведенном выше случае для адреса массива (r,s) у вас есть:

(r-1, s)
(r-1, s+1)
(r, s-1)
(r, s+1)
(r+1, s-1)
(r+1, s)

Также обратите внимание, что расположение чертежа прост: центр шестнадцатеричного (r,s) выше находится на экране:

x= dx * (s + 0.5*r)
y= dy * r

В качестве альтернативы вы можете смещать альтернативные строки на половину абсолютного абсолютного значения. Это даст вам более прямоугольную форму для данного массива, но тогда определение местоположения чертежа и ближайших соседей потребует два случая для четных и нечетных строк соответственно.

Существуют и другие системы координат, но они менее удобны и более неясны...


Поскольку OP хочет больше, я добавлю ссылку на мою любимую скрытую шестнадцатеричную индексацию: "спиральная сотовая мозаика" . Это использует систему base-seven для индексации последовательно больших групп "супер-шестиугольников" шестнадцатеричных местоположений следующим образом (обратите внимание, что она помечена в базе-7, а не в базовой-десяти):

7 elements:              49 elements:

  2   3
                            22  23
1   0   4  -->
                  12  13  21  20  24
  6   5
                11  10  14  26  25  32  33

                  16  15  02  03  31  30  34   --> [3 base-7 digits
                                                    -> 343 elements...]
                62  63  01  00  04  36  35

              61  60  64  06  05  42  43

                66  65  52  53  41  40  44

                      51  50  54  46  45

                        56  55

У ссылки есть некоторый код для работы с этой системой координат, но я на самом деле не пытался ее оценить....

Ответ 2

Существует четыре разных способа представления хехтиля в памяти:

введите описание изображения здесь

Ответ 3

A 2d массив отлично использует 2 строки = 1 гексагональную высоту и 1 столбец = 1 шестнадцатеричную ширину.

4,1,5,2,6,3
4,7,5,8,6,9
A,7,B,8,C,9
A,D,B,E,C,F
  • Каждая пара чисел - 1 гексагональная плитка.
  • Поиск 12 и 6 часов - это всего лишь + -Y, пока вы на другой плитке
  • Поиск 2 и 4 часов
    • Убедитесь, что Y + 1 - это одна и та же плитка
      • Если это так, 2 часа - X + 1 и 4 часа - X + 1, Y + 1
      • Если это не так, 2 часа - X + 1, Y-1 и 4 часа - X + 1