Arrays nach best Muster füllen

Eichelhäer

Bekanntes Mitglied
Hallo,

ich möchte ein eindimensionales float Array beliebiger Größe folgendermaßen füllen:

Code:
float[] vertices = {
                0f, 0f, 0f,//v0
                0f, -scl, 0f,//v1
                scl/2, 0f, 0f,//v2
                scl/2, -scl, 0f,//v3
                scl, 0f, 0f,//v4
                scl, -scl, 0f,//v5
                scl+scl/2, 0f, 0f,//v6
                scl+scl/2, -scl, 0f,//v7
                scl+scl, 0f, 0f,//v8
                scl+scl, -scl, 0f,//v9 28
                scl+scl+scl/2, 0f, 0f,//v10
                scl+scl+scl/2, -scl, 0f,//v11

Man kann nach einiger Betrachtung erkennen, dass es gewisse Regelmäßigkeiten gibt.
Zum einen sind jeweils paarweise die ersten beiden Zeilenwerte in halben Abständen stets gleich groß.
Zum anderen wiederholt sich -scl in der zweiten Spalte stets regelmäßig.

Das ganze dient dem Zweck letzten Endes ein 3 dimensionales Grid zu erstellen und ich möchte erstmal NICHT davon abkommen, da es via harcoding (also alle einträge von Hand - ein HAUFEN Arbeit) funktioniert. Und das meine ich mit Transformationen, Camera etc. .

Mir geht es jetzt nur darum mit meiner gefundenen Regelmäßigkeit das Array so zu füllen, dass mir die richtigen Werte mit einfachen Schleifendurchlauf über das Array ausgegeben werden.

Außerdem habe ich sowas noch nie gemacht mein Ansatz bezüglich obiger Daten ist folgender:

Java:
       int width = 12;
        int height = 3;
        System.out.println("original");
        for(int x = 0;x<vertices.length;x++) {
            System.out.print(vertices[x]+" , ");
        }
          
        System.out.println();
        System.out.println("eindimensional");
        float firstcounter = 0;    //Die beiden counter nehme ich zu speichern der letzten Werte
        float secondcounter = 0;
        float[] verticess = new float[width*height];
      
        for(int x = 0;x<width;x++) {
            for(int y = 0;y<height;y++) {
                if(y==0) {
                    if(x==0||x==1) {
                        verticess[y+x*width]=0.0f;
                    }
                    else if(x%2==0) {
                        firstcounter+=scl/2;
                        verticess[y+x*width]+=(float)(((int)(firstcounter*10)/10.0f));
                    }
                    else if(x%2==1) {
                        secondcounter+=scl/2;
                        verticess[y+x*width]+=(float)(((int)(secondcounter*10)/10.0f));
                    }
                }
                if(y==1) {
                    if(x%2==1) {
                        verticess[y+x*width]=-scl;
                    }
                }
                if(y==2) {
                  
                }
                System.out.print(verticess[y+x*width]+" , ");
            }
        }
       
        for(int x = 0;x<vertices.length;x++) {
            System.out.print(vertices[x]+" , ");
        }
 
Zuletzt bearbeitet von einem Moderator:
Sry, hab aus Unwissenheit auf irgendwas mit Thema erstellen geklickt^^.

Dort wo Font etc steht lasse ich mir das erstellte Array einfach ausgeben in etwa so:

Java:
for(int x = 0;x<verticess.length;x++) {
            System.out.print(verticess[x]+" , ");
        }

Das problematisch kommt aber noch, es sollten nach Ende einer Zeile das -scl mit der Zeilenzahl multipliziert werden um letztendlich ein mindestens Quadratisches Terrain zu erhalten.

Wäre für Unterstützung dankbar. Gruß Eichelhäer
 
Meinst du so etwas ?

Java:
public static float[] getTripleFactors(float scl, int num) {
        float[] values = new float[num * 3];
        int cnt = 0;
        float[] val = new float[2];
        for (int i = 0; i < values.length; i += 3) {
            values[i] = val[0];
            values[i + 1] = val[1];
            values[i + 2] = 0;
            cnt++;
            if (cnt % 2 == 0)
                val[0] += scl / 2;
            val[1] = cnt % 2 == 0 ? 0 : -scl;
        }
        return values;
    }
Java:
    float[] values = getTripleFactors(4, 10);
        for (int i = 0; i < values.length; i += 3) {
            System.out.print(values[i]);
            System.out.print("\t" + values[i + 1]);
            System.out.println("\t" + values[i + 2]);
        }
 
Hallo nochmal,

ich muss mich leider nochmal melden. Ich versuch ein regelmäßiges Grid zu erzeugen in der x-z-Ebene.
Das Array wird zwar mit Daten gefüllt, aber wie sage ich wenn eine neue Zeile meines Grids erzeugt werden soll?
Ist das einfach wenn x einen bestimmten Wert erreicht hat oder macht man das anders, denn eine neue Zeile hat ja je nach dem größere bzw. kleinere (hier) z-Werte?
 

Zurück
Oben