Как нарисовать / управлять сеткой шестиугольника? - PullRequest
7 голосов
/ 22 августа 2011

Я читал эту статью: создание / создание сетки шестиугольника в C .Но, похоже, и автор, и автор уже отказались от него.

√(hexagonSide - hexagonWidth * hexagonWidth): Что такое hexagonSide и hexagonWidth?Разве это не будет <0 (таким образом, квадратный корень не может быть вычислен). </p>

И можно ли поместить шестиугольник в прямоугольник?Мне нужно создать сетку следующим образом:

Source:Wikipedia

Еще одна вещь, как я могу расположить свой массив для хранения данных, а также узнать, какие ячейки находятся рядом с одной ячейкой?

Меня никогда не учили о шестиугольнике, поэтому я ничего не знаю об этом, но я могу легко выучить новое, поэтому, если вы сможете объяснить или дать мне подсказку, я могу сделать это сам.

Ответы [ 3 ]

9 голосов
/ 22 августа 2011

Один из способов представления данных состоит в том, чтобы думать об этом так:

a-b-c-d-e-
-f-g-h-i-j
k-l-m-n-o-
-p-q-r-s-t
u-v-w-x-y-

Тире - это нулевые местоположения - они существуют в массиве, но не представляют какой-либо шестиугольник.Здесь шестиугольник m связан с шестиугольниками c, g, h, q, r, w.Как только вы согласитесь с этим представлением, вы можете сделать его более компактным, удалив пустые места:

abcde
fghij
klmno
pqrst
uvwxy

Шестиугольник m все еще связан с шестиугольниками c, g, h, q, r, w, это простонемного сложнее увидеть.

Обновление Прочитайте это: http://www -cs-students.stanford.edu / ~ amitp / программирование игр / сетки /

4 голосов
/ 22 августа 2011

Вот как я рисую шестиугольник:

    public Hexagon(float pX, float pY, float pSize) {
        super(pX, pY, pSize, pSize);
//      setColor(1, 0, 0);
        setAlpha(0);

        float x1, x2, y1, y2;
        float lineWidth = 3;

        x1 = 0; y1 = pSize / 2;
        x2 = pSize / 4; y2 = (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
        Line line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        x1 = x2; y1 = y2;
        x2 = pSize * .75f; // Done
        line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        x1 = x2; y1 = y2;
        x2 = pSize; y2 = pSize / 2; // Done
        line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        x1 = x2; y1 = y2;
        x2 = pSize * .75f; y2 = pSize - (pSize * ((2 - (float)Math.sqrt(3)) / 4)); // Done
        line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        x1 = x2; y1 = y2;
        x2 = pSize / 4; // Done
        line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        x1 = x2; y1 = y2;
        x2 = 0; y2 = pSize / 2; // Done
        line = new Line(x1, y1, x2, y2);
        line.setLineWidth(lineWidth);
        attachChild(line);

        touchableArea = new Rectangle(pSize / 4, pSize / 4, pSize * .75f, pSize * .75f);
        touchableArea.setAlpha(0);
        attachChild(touchableArea);
    }
1 голос
/ 22 июля 2014

вы можете взглянуть на https://code.google.com/p/jhexed/ Я думаю, это может быть примером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...