![]() |
N-Dimensionales array über single index ansteuern
Nabend.
Ich habe gerade nen mathematischen hänger. Ich habe ein n-dimensionales array. Ich kenne die größe jeder dimension. Jede Dimension weißt nur eine größe auf(ist also nicht wie bei dyn-arrays unterschiedlich). Der array ist ein zusammenhängender speicherblock, den man auch seriel durchgehen könnte. für ein 2d array würde es so gehen:
Delphi-Quellcode:
und jetzt hängts bei mir gerade wie ich das nach n dimensionen ausweiten kann.
array[i, k]
array[i*maxd1 + k] Kann mir jemand auf die sprünge helfen? MFG Memnarch |
AW: N-Dimensionales array über single index ansteuern
Array[0..x-1]:
Array[a] Array[0..x-1, 0..y-1]: Array[a*x + b] Array[0..x-1, 0..y-1, 0..z-1]: Array[a*x + b*y + c] Usw Usf.. wie du siehst.. |
AW: N-Dimensionales array über single index ansteuern
ahh danke^^
|
AW: N-Dimensionales array über single index ansteuern
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Sei zB. x = y = z = 5, dann ist dann hat Element [2,3,1] den gleichen Index wie [3,2,1]: 26. Besser kann man das Rekursiv lösen: Anhang 36743 Dabei ist n die Anzahl der Dimensionen und s_i die Größe der i-ten Dimension mit 0 < x_i < s_i //EDIT: Ich sehe gerade das die Reihenfolge der Indizes bei mir anders ist als bei dem, was bei Mamnarch funktioniert. Eventuell ist die Reihenfolge der Indizes also anders herum. Das Prinzip sollte aber das richtige sein :mrgreen: |
AW: N-Dimensionales array über single index ansteuern
wäre dann die antwort für ein 3darray:
array[maxX][MaxY][MaxZ] array[a*MaxY*MaxZ + B*MaxZ + C] MFG Memnarch |
AW: N-Dimensionales array über single index ansteuern
Ja, das sollte funktionieren.
|
AW: N-Dimensionales array über single index ansteuern
Ja nach genauerem überlegen haste recht...
(z Achse: 2 -> bedeutet zwei x * y Scheiben..; ich muss räumlicher denken, sry :P)
Delphi-Quellcode:
(sofern keine Fehler vorhanden...)
function getNDimensional1DArrayIndex(const Dimensions, Indices: Array of Integer): Integer;
var i: Integer; s: Integer; begin Result := 0; if Length(Dimensions) <> Length(Indices) then Exit; s := 1; for i := High(Dimensions) downto 0 do // 1: so for i := 0 to High(Dimensions) do // 2: oder so begin inc(Result, Indices[i] * s); s := s * Dimensions[i]; end; end; |
AW: N-Dimensionales array über single index ansteuern
so hab ich mein werk für heute getan. Mein Compiler kann jetzt mit array definitionen umgehen :twisted:
Danke Bug und Aphton |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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