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