Zweidimensionale Anordnung, Berechnung der Kooridnaten
hansfritz
- programmiertechnik
0 Micha0 Frank (no reg)
Hallo,
Folgendes Problem:
Ich habe eine Liste von Objekten beliebiger Länge. Diese möchte ich gerne 'quadratisch' anordnen.
D.h. für die Listenelemente e1, e2, e3, e4 sollen koordinaten berechnet werden, damit eine Anordnung wie folgt entsteht:
e1 e2
e3 e4
Falls die Länge der Liste keine (ganze) Quadratwurzel hat, wird die letzte Zeile nicht aufgefüllt.
Habt Ihr Hinweise, wie der Algorithmus aussehen muss, mit welchem ich die Koordinaten errechne? Die X- resp. Y-Abstände sollen konstant sein.
Danke für Hinweise.
Hallo hansfritz,
Du nimmst die gesamtanzahl aller Listenelemente und ziehst die Wurzel. Von diesem Wert nimmst Du nur den ganzen Anteil (Integer) ohne die Nachkommastellen. Damit hast Du die Anzahl der Reihen und Spalten.
Beispiel:
Du hast 11 Elemente (e1 ... e11)
row = col = (int) sqrt(11) = 3
--> Koordianten
X-> 1 2 3
Y-> 1 2 3
und das in allen Kombinationen
e1: 1/1
e2: 1/2
e3: 1/3
e4: 2/1
e5: 2/2
e6: 2/3
e7: 3/1
e8: 3/2
e9: 3/3
Es entfallen e10 und e11
Mit freundlichem Gruß
Micha
Hi,
naja, du ziehst die Wurzel aus deinem Wert, rundest sie auf den nächsten Ganzzahligen Wert auf und nutzt diesen als Marker für die nächste Y-Koordinate
Bsp:
Anzahl Elemente = 244
Wurzel daraus: ~15.620
Aufgerundet: 16
d.h. dein Quadrat hat 16 x 16 Felder.
Dann gehst du die Liste ab dem ersten Element durch, zählst nebenbei einen Counter hoch. Und wenn der dann gleich 16 ist, machst du einen Umbruch auf die nächste Zeile und setzt den Counter zurück auf 1 oder 0, abhängig davon wann du genau hochzählst.
Der % Operator im Zusammenspiel mit der Gesamtmenge und der Länge der Dimension gibt dir dann den Hinweis, wie die Koordinaten aussehen.
Y = FLOOR(nr_of_element/16) + 1
X = (nr_of_element % 16)
Bei Element 233 von 244 bist du dann Zeile 15, Spalte 9.
Ciao, Frank