Соединённые шестиугольники C++ на плитке

У меня есть проблема, когда мне нужно представить шестиугольники на плитке по их центру (который я называю узлом) на моем графике. Учитывая плитку шестиугольников, как я могу определить, соединены ли два шестиугольника x и y?

введите здесь описание изображения
(источник: domathtogether.com)

Следующее будет работать с шестиугольниками с их положением в двухмерном пространстве, однако я хочу представить их положение целочисленной координатой (0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3) etc.

if (n1->getPoint().getEuclideanDistance(n2->getPoint()) < diameter)
{
    // The two are connected.
}

person Community    schedule 27.03.2014    source источник
comment
Предполагая, что все ваши шестиугольники имеют одинаковый размер, вам нужно только применить смещение к каждой второй строке для горизонтального положения. Вертикальный шаг всегда остается одинаковым. Таким образом, вы можете переключиться с целочисленных координат на евклидовы координаты и использовать свой оригинальный подход.   -  person Zeta    schedule 27.03.2014
comment
Что это combinedRadius? Я предположил, что соединение означает, что у шестиугольников есть общее ребро.   -  person Dialecticus    schedule 27.03.2014
comment
Это просто значение d или 2r. Все шестиугольники будут иметь одинаковый постоянный радиус.   -  person    schedule 27.03.2014


Ответы (1)


Предположим, что шестиугольники пронумерованы 012345 (верхний ряд 0), 0123456 (средний ряд 1), 012345 (нижний ряд 2): они соприкасаются, когда либо

  • в одной строке с индексами, отличающимися на +/-1, или

  • в строках, отличающихся на +/-1, и индексах, равных или отличающихся на +1 или -1 в зависимости от четности строк.

person Yves Daoust    schedule 27.03.2014