31 Stimmen

Erzeugung von dreieckigen/hexagonalen Koordinaten (xyz)

Ich versuche, eine iterative Funktion zu entwickeln, die xyz-Koordinaten für ein hexagonales Gitter erzeugt. Mit einem Start hex Position (sagen wir 0,0,0 der Einfachheit halber), möchte ich die Koordinaten für jede aufeinanderfolgende "Ring" von Sechsecken zu berechnen, wie hier dargestellt:

Bisher ist alles, was ich geschafft habe, mit diesem (Beispiel in javascript) zu kommen:

var radius = 3
var xyz = [0,0,0];

// for each ring
for (var i = 0; i < radius; i++) {
    var tpRing = i*6;
    var tpVect = tpRing/3;
    // for each vector of ring
    for (var j = 0; j < 3; j++) {
        // for each tile in vector
        for(var k = 0; k < tpVect; k++) {
            xyz[0] = ???;
            xyz[1] = ???;
            xyz[2] = ???;
            console.log(xyz);
        }
    }
}

Ich weiß, dass jeder Ring sechs Punkte mehr enthält als der vorherige und dass jeder 120°-Vektor für jeden Schritt vom Zentrum aus einen zusätzlichen Punkt enthält. Ich weiß auch, dass x + y + z = 0 für alle Fliesen. Aber wie kann ich eine Liste von Koordinaten generieren, die der nachstehenden Reihenfolge entsprechen?

    0, 0, 0

    0,-1, 1
    1,-1, 0
    1, 0,-1
    0, 1,-1
   -1, 1, 0
   -1, 0, 1

    0,-2, 2
    1,-2, 1
    2,-2, 0
    2,-1,-1
    2, 0,-2
    1, 1,-2
    0, 2,-2
   -1, 2,-1
   -2, 2, 0
   -2, 1, 1
   -2, 0, 2
   -1,-1, 2

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X