![]() |
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ß |
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 |
AW: Zweidimensionales Array drehen
Hallo,
nur als Ansatz, wie ich es lösen würde (eine Art Pseudocode):
Code:
Ist aber nur ein Gedanke. Könne aber funktionieren, wenn ich keinen Denkfehler gemacht habe.
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]; Grüße, Matze |
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... |
AW: Zweidimensionales Array drehen
Tipp: Ein Punkt (x|y) hat nach einer 90°-Drehung im Uhrzeigersinn um den Ursprung die Koordinaten (y|-x) ;) .
|
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 ;-) |
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:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz