Torusförmiges Array addressieren



  • Hat jemand von Euch irgendwo einen Codeschnipsel, mit dem die Abbildung eines linearen Arrays auf einen Torus gemacht wird?

    Ich möchte n Objekte auf einem Torus mit den Dimensionen

    m*o=n
    

    anordnen, und brauche hauptsächlich die 8 Nachbarschaftsindizes in die 8 Himmelsrichtungen, ausgedrückt in Abhängigkeit vom betrachteten Index i.

    Beispiel:

    n=12
    m=3
    o=4
    

    Der Torus aufgetrennt und flach dargestellt sieht dann so aus:

    |  |  |
    - 0- 1- 2-
      |  |  |
    - 3- 4- 5-
      |  |  |
    - 6- 7- 8-
      |  |  |
    - 9-10-11-
      |  |  |
    

    Wenn ich also z.B. i=2 habe, möchte ich die Indexe der 8 Nachbarn in den Hauptrichtungen haben:

    N=11  NO=9  O=0  SO=3  S=5  SW=4  W=1  NW=10
    


  • etwas lineares in etwas rechteckiges abbilden:
    du hast i gegeben:

    dann einfach Teilen ohne Rest: i/Breite = y
    i mod Breite = x
    nun hast du x und y in kartesischen Koordinaten

    => in Torus umwandeln:
    Höhe, Breite, x und y gegeben:
    ((x mod Höhe),(y mod Breite)) = (x',y')

    x' und y' sind die Toruskoordinaten

    aus x' und y' kommst du wieder auf linieares Array:
    x'*Breite+y'*Breite = n



  • Vertexwahn schrieb:

    etwas lineares in etwas rechteckiges abbilden:
    du hast i gegeben:

    dann einfach Teilen ohne Rest: i/Breite = y
    i mod Breite = x
    nun hast du x und y in kartesischen Koordinaten

    => in Torus umwandeln:
    Höhe, Breite, x und y gegeben:
    ((x mod Höhe),(y mod Breite)) = (x',y')

    x' und y' sind die Toruskoordinaten

    aus x' und y' kommst du wieder auf linieares Array:
    x'*Breite+y'*Breite = n

    Danke Dir! Ich dachte, da gäbe es eventuell etwas Trickreiches ohne Umwandlung in kartesische Koordinaten, aber okay...


Anmelden zum Antworten