2011-08-22 17 views
7

Ho letto questo articolo: generating/creating hexagon grid in C. Ma sembra che sia l'autore che il rispondente lo abbiano già abbandonato.Come disegnare/gestire una griglia esagonale?

√(hexagonSide - hexagonWidth * hexagonWidth): Che cos'è hexagonSide e hexagonWidth? Non sarà lo < 0 (quindi la radice quadrata non può essere calcolata).

E, posso inserire un esagono in un rettangolo? Ho bisogno di creare una griglia come questa:

più

Source:Wikipedia

Una cosa, come posso organizzare il mio array per memorizzare i dati, così come ottenere il quale le cellule sono accanto a una cella?

Non mi è mai stato insegnato l'esagono, quindi non ne so nulla, ma posso facilmente imparare nuove cose, quindi se puoi spiegarmi o darmi un indizio, potrei farlo da solo.

+0

Facendo questo richiederebbe niente di più che un po 'di geometria/trigonometria. Gli angoli al vertice di un esagono sono tutti 360/3 gradi o 120 gradi. Con queste informazioni e l'uso dei metodi della libreria Java Math (anche se fai attenzione a cambiare i gradi in radianti), dovresti essere in grado di disegnare facilmente senza l'uso di altro codice. Lavora con diagrammi su carta prima di commettere il codice su IDE. Trovo che sia meglio pensare a un esagono come sei triangoli equilateri, ma fare tutto ciò che è meglio per te. Quindi torna con il tuo codice se sei bloccato e saremo più che felici di aiutarti! –

+0

Non sono sicuro di cosa stia parlando il tizio del collegamento, ma la trigonometria di base ti dirà che il lato dell'esagono, s, è correlato alla sua altezza dalla radice s * quadrata di 3 o in Java 's * Math.sqrt (3); ' –

+1

Vedere questo post su come trovare i vicini http://stackoverflow.com/questions/6661169/finding-adjacent-neighbors-on-a-hexagonal-grid – Buhb

risposta

4

Questo è come mi traggo l'esagono:

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

cosa estendi? ...non è un TextView? –

+0

È una classe di rettangoli di 'AndEngine'. Puoi ottenere lo stesso risultato con la vista Canvas di Android disegnando le linee come menzionato. –

+0

Quindi questo disegna un esagono? Per favore vedi [la mia domanda] (http://stackoverflow.com/questions/30241050/how-to-draw-a-hexagon-map-in-libgdx-using-the-polygon-class?noredirect=1). Forse puoi aiutarmi a risolvere il mio problema. –

9

Un modo per rappresentare i dati sarebbe quello di pensare a come questo:

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- 

I trattini sono luoghi nulli - esistono nell'array, ma non rappresentano alcun esagono. Qui, l'esagono m è collegato agli esagoni c, g, h, q, r, w. Una volta che siete ok con questa rappresentazione, si può rendere più compatto, eliminando le posizioni nulle:

abcde 
fghij 
klmno 
pqrst 
uvwxy 

Hexagon m è ancora collegato alla esagoni c, g, h, q, r, w, è solo un po ' più difficile da vedere.

aggiornamento Legga questo: http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

Problemi correlati