Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi N-Dimensionales array über single index ansteuern (https://www.delphipraxis.net/167710-n-dimensionales-array-ueber-single-index-ansteuern.html)

Memnarch 14. Apr 2012 14:51

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:
array[i, k]
array[i*maxd1 + k]
und jetzt hängts bei mir gerade wie ich das nach n dimensionen ausweiten kann.
Kann mir jemand auf die sprünge helfen?

MFG
Memnarch

Aphton 14. Apr 2012 16:04

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..

Memnarch 14. Apr 2012 16:18

AW: N-Dimensionales array über single index ansteuern
 
ahh danke^^

BUG 14. Apr 2012 16:24

AW: N-Dimensionales array über single index ansteuern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Aphton (Beitrag 1161837)
Array[0..x-1, 0..y-1, 0..z-1]:
Array[a*x + b*y + c]

Das das ist falsch.

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:

Memnarch 14. Apr 2012 18:07

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

BUG 14. Apr 2012 18:12

AW: N-Dimensionales array über single index ansteuern
 
Ja, das sollte funktionieren.

Aphton 14. Apr 2012 18:45

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:
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;
(sofern keine Fehler vorhanden...)

Memnarch 14. Apr 2012 18:56

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 18:49 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