2011-08-22 14 views
7

Przeczytałem ten artykuł: generating/creating hexagon grid in C. Ale wygląda na to, że zarówno autor, jak i osoba udzielająca odpowiedzi już ją porzuciły.Jak rysować/zarządzać siatką sześciokątną?

√(hexagonSide - hexagonWidth * hexagonWidth): Co to jest hexagonSide i hexagonWidth? Czy to nie będzie < 0 (tak nie można obliczyć pierwiastka kwadratowego).

Czy mogę umieścić sześciokąt w prostokącie? Trzeba utworzyć siatkę tak:

Source:Wikipedia

jeszcze jedno, w jaki sposób można zorganizować moją tablicę do przechowywania danych, a także uzyskać komórki, które znajdują się obok jednej komórce?

Nigdy nie uczyłem się o sześciokącie, więc nic o tym nie wiem, ale mogę łatwo nauczyć się czegoś nowego, więc jeśli możesz wyjaśnić lub dać mi wskazówkę, mogę to zrobić sam.

+0

Rozwiązanie to wymagałoby nic więcej niż trochę geometrii/trygonometrii. Kąty na wierzchołku sześciokąta wynoszą 360/3 lub 120 stopni. Dzięki tym informacjom i zastosowaniu metod biblioteki Java Math (choć należy zwrócić uwagę, aby zmienić stopnie na radiany), powinieneś być w stanie to narysować bez użycia innego kodu. Najpierw przeprowadź pracę z diagramami na papierze przed zatwierdzeniem kodu do IDE. Uważam, że najlepiej jest myśleć o sześciokącie jako sześciu równobocznych trójkątach, ale rób wszystko, co najlepiej dla ciebie działa. Potem wróć z kodem, jeśli utkniesz, a my z chęcią Ci pomożemy! –

+0

Nie jestem pewien, o czym mówił facet w linku, ale podstawowa trygonometria powie ci, że bok sześciokąta, s, jest powiązany z jego wysokością przez s * pierwiastek kwadratowy z 3 lub w Javie * Math.sqrt (3); ' –

+1

Zobacz ten post, jak znaleźć sąsiadów http://stackoverflow.com/questions/6661169/finding-adjacent-neighbors-on-a-xxagonal-grid – Buhb

Odpowiedz

4

To jest jak rysuję sześciokąt:

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); 
    } 
+0

co rozszerzasz? ...nie jest TextView? –

+0

To jest klasa prostokąta "AndEngine". Ten sam efekt można uzyskać w widoku Canvas systemu Android, rysując linie zgodnie z opisem. –

+0

Więc to rysuje sześciokąt? Zobacz [moje pytanie] (http://stackoverflow.com/questions/30241050/how-to-draw-a-hexagon-map-in-libgdx-using-the-polygon-class?noredirect=1). Może możesz mi pomóc rozwiązać mój problem. –

9

Jednym ze sposobów przedstawiania danych byłoby myśleć o tym tak:

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- 

Kreski są puste miejsca - istnieją w tablicy, ale nie reprezentują żadnego sześciokąta. Tutaj sześciokąt m jest połączony z sześciokątami c, g, h, q, r, w. Gdy jesteś z tym ok reprezentacji, można uczynić go bardziej zwarty poprzez usunięcie pustych lokalizacje:

abcde 
fghij 
klmno 
pqrst 
uvwxy 

Hexagon m jest nadal podłączony do sześciokąty C, G, H, Q, R, W, to tylko trochę trudniej zobaczyć.

Aktualizacja Przeczytaj to: http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

Powiązane problemy