Итак. Предлагаю свой вариант.
Для начала нужно разбить плоскость привычными нам осями x и y
Затем наносим гексо-сетку. Но, т.к. она предстаёт в не совсем привычной фоорме для представления координат, можно допустить смещение каждой второй строчки по оси y вправо, и затем уже отметить центр и провести оси в нашей воорбажаемой гексо-плоскости
Свернутый текст
Красный - центр
Зелёный - ось y
Синий - ось x
Теперь, нам нужно пронумеровать их, чтобы при взгляде было сразу понятно что к чему.. С учётом всё того же нашего допускаемого смещения получится вот так вот. (Опускаем отрицательные числа для учёта того представления, которое ранее описывал Велвет)
Свернутый текст
Нужно расставить стороны света, делаем
Свернутый текст
Итак.. для рассчётов всё готово. По примеру описанному ранее мы легко сможем понять запись NE_0001-0003 , это значит, что нужная нам ячейка находится в зоне NE(I четверь декартовой системы координат), и занимает место в Первой клетке относительно оси x и Третье относительно y . Причём на графике выглядит не вырвиглазно, т.к. находим центр и перемещаемся на 3 вверх и 1 вправо
Свернутый текст
Нули опущены, чтобы текст влез в ячейку
Далее возникает вопрос: Как обозначать ячейки, в которых x и/или y принимают 0? Ну тут я вижу два выхода:
1) Заменяем первое значение обозначения (Прикольно сказал ) на NN, EE, SS, WW для случаев ухода клеток в одну из сторон. В итоге это будет выглядеть не совсем красиво и поэтому этот способ будет немного стрёмно смотреться.
2) (Более крутой) Выбираем 2 стороны света "главными", которым, так сказать, "принадлежат" нули. Например, логично выбрать главными относительно верха-низа Север(N), а относительно право-лево Восток(E). В итоге, т.к. их координаты могут быть нулевыми, спокойно можно допустить название таких ячеек, как NE_88-0 , NE_0-15, в свою же очередь написание SE_88-0 будет недопустимо, т.к. Югу(S) не доступны нули в y координате. На словах звучит страшно, но впринципе, если хорошенько представить всё в голове, то всё будет выглядеть эстетично.
Теперь, определившись с положением в плоскости и обозначением нужно понять, как вычислить координаты центров каждого гекса. Тут идёт сплошная математика и логика. Т.к. в данной системе нету отрицательных нумераций гексов, то придётся определить 8 формул для определения координат центров (4 для x, 4 для y). А именно рассчёт центров для гексов: NE,NW,SW,SE. Плюс ко всему, не забываем о смещении нечётных гексов вправо (Выявлено в самом начале), значит, в каждом гексе с нечётной y-координатой нам нужно добавить смещение вправо в пол-гекса. В итоге 8x2=16 формул для точного определения центров нажих гексов.
Чтож, начинаем с NE:
X=WX+NX*L
Y=WY+NY*L+L/2(Для случаев с нечётным y)
Отсюда:
X,Y - искомые координаты в мире
WX,WY - Координаты центра мира
NX,NY - Номер ячейки
L - Сторона ячейки
Пример:
Центр мира на 598,-1220
Сторона нашего ячейки 100
Искомый центр Ячейка(21,33)
Сразу видно, y - нечётный, значит учтём L/2
X=598+21*100=2698
Y=-1220+33*100+50=2130
В итоге центр Нашего NE_0021-0033 располагается по координатам (2698,2130)
Для остальных сторон света формула будет такой же, но в зависимости от самой стороны NX или NY будет домножаться на -1, по понятным причинам..
Ну вот вроде всё, что я хотел сказать и предложить.(Переделал)
Ах да, насчёт скриптов... Сделать это не очень трудно, но если нужно, то чуточку придётся подождать.
В итоге, в моём представлении всё должно выглядеть вот так
Свернутый текст
Отредактировано LastLife (01-04-2014 20:49:47)