array[height * y + x] bei "3D/4D/..." arrays



  • hm, ich weiß garnicht wie ich anfange soll...
    nehmen wir an ich habe ein array "int array[100 * 100];" nun möchte ich es als ein spielfeld (<- nur ein beispiel) mit 100 * 100 feldern benutzen. da es aber nur ein 1d array ist, schreibe ich mir eine funktion, um es wie ein 2d array zu indizieren:

    int index(int array[100 * 100], int x, int y)
    {
        return array[y * 100 + x];
    }
    

    bis hierhin ist es klar, aber sagen wir nun (wieder nur als beispiel) ich möchte ein 3D spielfeld haben, aber das ganze wieder nur in einem 1D array angeordnet, wie kann ich dann mittels drei "koordinaten" auf array elemente zugreifen??
    und wie sähe das bei 4D oder gar bei N-D Arrays aus??
    danke schonmal



  • Kannst du nicht einfach dies benutzen?

    std::vector< std::vector<int> >  meinVektor;
    

    Das ist sozusagen ein 2D-Array, nur dass du es wärend der Laufzeit erweitern kannst. Der Aufruf ist dann z.B.:

    //... Vektor vorher mit Werten gefüllt
    
    int eineZahl = meinVektor[10][10];  //als Beispiel an der Position (10/10)
    

    Damit ist, um auf dein Beispiel einzugehen, IMHO leichter, ein Spielfeld zu simulieren.



  • ja, könnte ich, aber das mit dem spielfeld war ja wie gesagt nur ein beispiel und ich möchte gerne wissen, wie ich die oben genannte methode (für 2d aqrrays) auf 3d, 4d, ..., n-d arrays "erweitern" kann (trotzdem danke)



  • int index(int array[100 * 100 * 100], int x, int y, int z)
    {
        return array[z * 100 * 100 + y * 100 + x];
    }
    


  • und wenn das array andere dimensionen hat? z.b. 100 * 90 * 80?
    hab ein bisschen überlegt, dann müste es doch:

    array[100 * 90 * z + 100 * y + x];
    

    heißen, oder? also die "breite" mal "höhe" mal z + "breite" * y + x, oder?



  • Ich hoffe so wird's klarer:

    #define BREITE 80   // 0 <= x < 80
    #define LAENGE 90   // 0 <= y < 90
    #define HOEHE 100   // 0 <= z < 100
    
    int array[BREITE * LAENGE * HOEHE];
    
    ...
    
    array[z * BREITE * LAENGE + y * BREITE + x];
    

    und ja, ich oute mich hiermit als #define-Benutzer. Beschimpft mich mit Tiernamen 😉


Anmelden zum Antworten