Простая генерация гексагональной (шестиугольной) сетки из центра + поворот матрицы на любой угол. Апгрейд 2019 года (комментарии)
Это сообщение сгенерировано автоматически.
Красотень )
Incvisitor
Маленькая придирка.
Мне не нравится версия гексо-полей с Вертикальными зубцами.
Я люблю горизонтальные зубцы, аля волны /\/\/\ по оси Хикс.
-00000
00110
-01110
00110
-00000
Ноль - это невидимые борт-ячейки. Минус - это разница в половину ячейки.
slatazan
Это ты верно подметил.
Ну тут есть 3 варианта:
1. Повернуть все вместе на 90 (30) градусов вокруг вертикальной оси:)
2. Повернуть камеру на -90 градусов вокруг вертикальной оси:)
3. Переписать алгоритм.
slatazan
Привязал все гексаконы к центральном и повернул его на 30 градусов.
Incvisitor
Нормально.
Это поле для проекта стратегии ?
Или визуальный эфект для красоты ?
Ну, возможно это будет игра.
Когда-то я писал пример для другой темы:
Iso-Hex
slatazan, благодаря тебе я улучшил функцию! Теперь можно вращать матрицу на любой угол!
Incvisitor
Круто !!!
Mikle
Я мало интересовался гексо-полями.
Как я понял, у тебя там каждая строка на половину ячейки уходит вправо, зато логика линейная.
А я, как дурачок, проецирую линейный масив и поиск клеток, разделяя запросы по строкам на чёт-нечет.
У меня, каждая вторая строка начинается с лишней ячейки, которая занимает место в масиве, но
всегда игнорируется.
Даже не знаю, какой вариант лучше для логики, и для графики.
slatazan
Я сильно не вчитывался в твой вариант, но мой явно компактнее. Вообще, этот пример писался для обратной задачи - нахождения координат на гексагональном поле, в этой теме обсуждалось:
http://www.gamedev.ru/code/forum/?id=123819#m0
Incvisitor
>Недавно я столкнулся с проблемой генерации шестиугольной сетки из центра.
вообще то самый православный способ генерации гексагональной решётки из центра
это spiral honeycomb mozaic
http://paulbourke.net/texture_colour/tilingplane/
там поиском по странице "Hexagonal Lattice"
самый главный прикол в том что это еще и система индексирования гексагональной решетки в семиричной системе счисления
и для данной системы определены операции умножения сложения и т д и тп
что позволяет допустим манипулировать изображениями
http://paulbourke.net/texture_colour/tilingplane/hexmul.html
http://paulbourke.net/texture_colour/tilingplane/hexmul2.html
http://paulbourke.net/texture_colour/tilingplane/hexadd.html
еще оно называется Spiral Architecture
cNoNim
Неплохо.
Incvisitor
вот более "правильная" функция получения координат центра гексагона, по индексу гексагона
то что в статье имеет ряд ограничений и прочих мелких недостатков...
это кончено тоже не идеал, но всяко получше,
function hexCoord(index : number) { var base = 1; var radius = Math.sqrt( 3); var x = 0, y = 0; for( var i = 0; i <= ( Math.log( index) / Math.log( 7)); i++) { var digit = Math.floor( ( index % ( base * 7)) / base); if ( digit != 0) { var theta = Math.PI + i * Math.atan( Math.sqrt( 3) / 2) + ( digit - 1) * 60 * Math.PI / 180; x += ( radius * Math.sin( theta)); y += ( radius * Math.cos( theta)); } radius *= Math.sqrt( 7); base *= 7; } return { x: x, y: y } }
сори что typescript, я обещал в этом году на С++ не писать )
Тема в архиве.