2017-03-29 5 views
1

Ich habe ein sechseckiges Gitter aus Sechsecken. Ich muss die Gitterkoordinaten einer Kachel finden, auf die ein Benutzer klickt. Wie kann ich das tun, wenn der folgende Code berechnet, wo die Kacheln gezeichnet werden?Wie kann ich die Gitterkoordinaten einer Hexagon-Kachel in Java um einen Pixelpunkt erhalten?

private void CalcHexCoords() { 

     Point origin = new Point(originX, originY); 
     double ang30 = Math.toRadians(30); 
     double xOff = Math.cos(ang30) * (radius + padding); 
     double yOff = Math.sin(ang30) * (radius + padding); 
     int half = size/2; 

     int i = 0; //total number of tiles 
     for (int row = 0; row < size; row++) { 

      int cols = size - Math.abs(row - half); 

      for (int col = 0; col < cols; col++) { 

       int xLbl = row < half ? col - row : col - half; 
       int yLbl = row - half; 
       int centerX = (int) (origin.x + xOff * (col * 2 + 1 - cols)); 
       int centerY = (int) (origin.y + yOff * (row - half) * 3); 

       Hexagon hex = new Hexagon(centerX, centerY, radius); 
       hexagons.add(hex); 
       int[] coords = new int[]{xLbl, yLbl}; 
       Tile tile = new Tile(rsrc, hex.center, radius, diceSpaces.get(i), coords, i, hex); 
       tiles.put(coords[0] + "," + coords[1], tile); 
       i++;    
      } 
     } 
    } 

Dies ist das Koordinatensystem benutze ich: enter image description here

+0

In Ihrem Code verwenden Sie die Klasse "Hexagon". Schauen Sie hinein, es speichert wahrscheinlich alle Ecken. Wenn dies der Fall ist, ist die Berechnung, ob ein Punkt innerhalb von Scheitelpunkten liegt, ziemlich genau – BackSlash

Antwort

0

Es gibt nicht viel Codierung hier aber Geometrie am meisten.
Sie erhalten Hexagon Zentrum xc, yc und Radius r (Radius entspricht Seitenlänge).
berechnen, wo Ecken insbesondere Sechseck liegen sollten Sie:

North corner: xc , yc+r, 
South:xc,yc-r, 
NE:xc+r, yc+1/2r, 
NW:xc-r,yc+1/2r, 
SE:xc+r,yc-1/2r 
SW:xc-r,yc-1/2r 

Wenn Sie Bildschirm verwenden Koordinaten dann wird Ihre y-Achse zurückgesetzt, so dass Sie Zeichen schalten, wenn y-Koordinaten zu berechnen.

Wenn Sie auch herausfinden müssen, welches Sechseck geklickt wurde, dann müssen Sie den Abstand zwischen dem Mausklick und der Mitte jedes Sechsecks berechnen. Wenn es niedriger als der Radius eines gegebenen Sechsecks ist, haben Sie Ihr geklicktes Sechseck und fahren Sie fort, wie oben beschrieben.

Verwandte Themen