Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Zweidimensionales Array drehen (https://www.delphipraxis.net/151915-zweidimensionales-array-drehen.html)

Fussball-Robby 6. Jun 2010 20:23

Zweidimensionales Array drehen
 
hey, auch nach längerem Tüfteln komme ich zu keiner Lösung.. Ich möchte ein quadratisches zweidimensionales Array (zur Zeit ein 3x3-Array) um 90 Grad drehen.
Sprich, aus:
XXX
OOO
XXX
wird:
XOX
XOX
XOX

Die Lösung sollte möglichst dynamisch sein, also später auch für größere Arrays (insbesondere welche mit ungerader Zeilen-/Spaltenlänge) funktionieren.

Ich wäre für Ansätze sehr dankbar.
Gruß

jfheins 6. Jun 2010 20:24

AW: Zweidimensionales Array drehen
 
1. Neues Array erstellen
2. Kopieren, dabei bei beiden Arrays jeweils unterschiedliche Indizes benutzen
3. Das neue Array zurückgeben

So schwierig?
Oder soll das ganze in-place arbeiten? Dann wäre ein wenig mehr erforderlich, aber solange es bei quadratischen Arrays bleibt, kein Problem...
Sowas ungefähr:
Delphi-Quellcode:
for i := 0 to High(arr) do
  for j := 0 to i do
    Exchange(arr, i, j); // Hier arr[i,j] und arr[j,i] tauschen

Matze 6. Jun 2010 20:28

AW: Zweidimensionales Array drehen
 
Hallo,

nur als Ansatz, wie ich es lösen würde (eine Art Pseudocode):

Code:
newArr: array of ...; // leeres Array mit gleicher Dimension erstellen

// altes Array durchgehen
for x := Low(oldArr) to High(oldArr) do
  for y := Low(oldArr) to High(oldArr) do
    newArr[y][x] := oldArr[x][y];
Ist aber nur ein Gedanke. Könne aber funktionieren, wenn ich keinen Denkfehler gemacht habe.

Grüße, Matze

Fussball-Robby 6. Jun 2010 20:33

AW: Zweidimensionales Array drehen
 
Danke für die Antworten. Die Technik selbst (in tmp-Array kopieren etc.) ist mir natürlich klar.
@Matze: Die Idee hatte ich spontan auch. Aber beim genaueren Hinsehen erkennt man, dass das Array dadurch gespiegelt, aber nicht um 90 Grad gedreht wird. MyArray[3, 3] wird beispielsweise nicht verändert, liegt also auf der Spiegelachse.
So schwer kann es doch eigentlich nicht sein wenn das Array schon quadratisch ist...

Khabarakh 6. Jun 2010 20:37

AW: Zweidimensionales Array drehen
 
Tipp: Ein Punkt (x|y) hat nach einer 90°-Drehung im Uhrzeigersinn um den Ursprung die Koordinaten (y|-x) ;) .

Fussball-Robby 6. Jun 2010 20:39

AW: Zweidimensionales Array drehen
 
Super, danke für den Denkanstoß. Durch die Idee, den Ursprung in der Mitte des Arrays zu sehen und nicht links oben, wird es ein Kinderspiel :thumb:
Danke nochmal und nen schönen Abend ;-)

Micha88 7. Jun 2010 12:24

AW: Zweidimensionales Array drehen
 
Hier mal mein Code, wie ich Punkte eines Arrays um 90° drehe. (Bild)
Der Haken ist jedoch,.. das ist JAVA :-)

Code:
public static ImageChannel turn(ImageChannel ch)
  {
    byte[] lum = ch.getIntensity();
    int iH = ch.getHeight();
    int iW = ch.getWidth();
   
   byte[] v = new byte[lum.length];
   for (int i = 0; i < iH; i++)
   {
     for (int j = 0; j < iW; j++)
     {
       v[j * iH + i] = (byte)lum[i * iW + j];
     }
   }
   
   ImageChannel chinv = new ImageChannel(v, iH, iW);   
   return chinv;
  }


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz