Мы имеем гексагональную латиницу:
_ _ _
/ \_/ \_/ \_
\_/ \_/ \_/ \
/ \_/ \_/ \_/
\_/ \_/ \_/
Каков наилучший способ представить его с помощью двумерного массива или любого другого
Мы имеем гексагональную латиницу:
_ _ _
/ \_/ \_/ \_
\_/ \_/ \_/ \
/ \_/ \_/ \_/
\_/ \_/ \_/
Каков наилучший способ представить его с помощью двумерного массива или любого другого
Самый простой способ представить шестнадцатеричную сетку с 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
У ссылки есть некоторый код для работы с этой системой координат, но я на самом деле не пытался ее оценить....
Существует четыре разных способа представления хехтиля в памяти:
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