Комментарии 25
Спасибо, очень интересно.
Могу добавить, что для определения соседей в варианте со смещением достаточно одной таблицы и одного условия.
Могу добавить, что для определения соседей в варианте со смещением достаточно одной таблицы и одного условия.
// pxi - направление
int16_t dx = dirs_hex[ pxi ][0];
int16_t dy = dirs_hex[ pxi ][1];
if( dy != 0 ) dx += points[i].y & 1;
+1
Когда перевод не имеет смысла — в оригинале все картинки-схемы интерактивны, позволяя лучше понять смысл происходящего.
+7
Поэтому я сто раз собирался перевести этот пост, но хабр так и не научился поддерживать нормальные интерактивные вставки! Но гифками тоже вполне неплохо, так что автору спасибо за большую работу.
0
Нет, ведь в оригинале этой статьи скрипт, делающий интерактив, встроен в тело страницы. Можно вытащить его и перенести на какой-нибудь JSFiddle, но слишком много возни. Плюс там при переключении режима вертикальные/горизонтальные гексы обновляются схемы на всей странице сразу, через фреймы это было бы невозможно.
0
Да, согласен. Переводчику спасибо, материал полезен, но для получения истинного удовольствия, обязательно надо смотреть оригинал.
+2
Неплохая статья (и вообще весь сайт, побольше бы там материалов), но я лично, когда реализовывал гексовое поле, использовал как шпаргалку вот это: http://ondras.github.io/rot.js/manual/#hex/indexing
+2
НЛО прилетело и опубликовало эту надпись здесь
Не вижу большой разницы с обычной четырехугольной сеткой — регулярность сохраняется, лишь добавляется одно условие по дополнительному соседу, такое же регулярное по массиву.
+1
Любопытный факт: в Fallout начало координат в правом верхнем углу почему-то.
0
Потому что Z-Order. Объекты с большими координатами рисуются позже.
0
Ну про порядок отрисовки можно не рассказывать — там много интересных деталей и тонкостей.
0
Не очень много и не очень интересных. Поверьте мне, я эту фоллаутовскую отрисовку писал: https://github.com/falltergeist/falltergeist/blob/master/src/State/Location.cpp#L590
0
Ого, как много систем координат, интересно написано. Только по поиску пути непонятно зачем применять Дейкстру или Флойда-Уоршелла, граф планарен, вполне можно обойтись заливкой (волновым алгоритмом).
0
Дык вроде алгоритм Дейкстры — это по сути и есть заливка, только для более общего случая...
0
Волновой алгоритм — это когда проверяешь каждую клетку на совпадение с индексом текущей волны и обновляешь соседей на +1 (ну или стоимость прохождения). В случае дейкстры — проверяется только список активных клеток по периметру «волны».
0
Да ладно, кто ж будет обходить все клетки для поиска фронта, когда можно фронт держать в виде списка или массива?
Всей разницы — для Дейкстры приходится держать очередь с приоритетами, т.к. шаги до соседних вершин имеют разную длину.
0
В этом и различие между волновым / очередью — для волнового нужно проверять все клетки на возможность растекания и стоимость каждой клетки должна быть кратна шагу итерации, в случае очереди стоимость произвольна и проверяется только список еще непроверенных клеток (фронт).
0
- Описания волнового алгоритма, которые я встречал, не конкретизируют, как именно перебирать точки фронта. Говорится лишь "для каждой точки, помеченной на предыдущей итерации..."
- Никто, у кого опыт программирования хотя бы полгода, не будет для поиска помеченной точки перебирать весь массив.
- Если поищете упоминания сложности волнового алгоритма — найдёте O(n²). Довольно-таки прозрачный намёк.
0
Эх, давно было
(чисто пример блужданий в 6-угольной сетке, к генрации их никаким боком)
(чисто пример блужданий в 6-угольной сетке, к генрации их никаким боком)
-1
Спасибо за перевод, 2 года назад писал по этой статье свой диплом. Искал перевод, так и не нашел, благо там всё интерактивное. Было бы замечательно, если появятся ещё переводы с этого сайта, там много отличных статей. Вот пример: Noise Functions and Map Generation
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создание сеток шестиугольников