Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 17.06.03 18:20 
Hi,

ich hab mal ne frage (mehr ne Theoretische Frage):

Wenn ich einen Array[1..1000, 1..000] of Single habe, gibt es da eine schnellere Methode um zu überprüfen ob ein Feld <>0 ist als:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
for x:=1 to 1000 do
  for y:=1 to 1000 do
    if Array[x,y]<>0 then
      ...


???

Eigentlich ja nicht, oder??? (Ich dachte eventuell daran, das man vieleicht den Speicherbereich prüfen, bzw einschränken kann, oder evtl kann man mit Pointern was reißen??? *guckt unsicher*)

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Di 17.06.03 18:52 
Schneller gehts nicht soviel ich weis, und Pointer zeigen ja nur auf die Speicheradresse und nicht auf den Inhalt, mit denen dürfte man auch nicht weit kommen.
Array[1..1000,1..1000] of Single ... was willste denn damit machen? =)

_________________
Das wahre Ziel des Krieges ist der Frieden.
Sun Tzu
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 17.06.03 19:06 
Elayla hat folgendes geschrieben:
Array[1..1000,1..1000] of Single ... was willste denn damit machen? =)

Ich hatte letzte nacht einen geistesblitz... ;) Werde damit in OpenGL eine Wasser-simulation (für meine Engine) erstellen (mit wellen etc).

Einziger nachteil ist, das nen so großer Array halt nich 100x pro Sekunde durchgeackert werden kann..

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Di 17.06.03 19:09 
Hehe schreib doch mal ein Programm das testet wie oft pro Sekunde der Rechner das Array durchstöbern kann =)

_________________
Das wahre Ziel des Krieges ist der Frieden.
Sun Tzu
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Di 17.06.03 19:12 
Bei nem Image gibt es ja sowas wie Scanline und das ist anscheinend schneller als das punktweise auslesen :| Kannst ja mal gucken wie das da gemacht ist

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 17.06.03 19:17 
Tweafis hat folgendes geschrieben:
Bei nem Image gibt es ja sowas wie Scanline und das ist anscheinend schneller als das punktweise auslesen :| Kannst ja mal gucken wie das da gemacht ist

Das ist purer Blödsinn um es noch höflich auszudrücken.

ScanLine liefert ein Byte-Array, das direkt auf die Daten zugreift. Pixels[] hingegen ruft unter anderem Windows.SetPixel/Windows.GetPixel auf und da steckt wiederum viel Code dahinter. Ein einfacher Zugriff auf das Array ist dabei die schnellste Methode. Und genau so gilt dies auch für ein array of Single. Wobei ich da eher zu array of Double tendiere, da die Umrechnung zum Coprozessor etwas schneller von statten geht.

_________________
Ist Zeit wirklich Geld?
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Di 17.06.03 19:22 
Sorry, Sorry, nur keine Aufregung. Woher soll ich das denn wissen? Ich hab halt gedacht: Ok, bei Image geht das ja anscheinend per Scanline schneller, warum sagste das nicht mal, könnte ja helfen.

:roll:

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 17.06.03 19:23 
Hi,
AndyB hat folgendes geschrieben:
Wobei ich da eher zu array of Double tendiere, da die Umrechnung zum Coprozessor etwas schneller von statten geht.

Allerdings benötigt ein Double Wert doppelt soviel Speicher wie ein Single Wert.. ;) (Single = 4Byte, Double = 8Byte)

Zwar ist das trotzdem noch klein, aber bei der menge die ich benutze können das gut mal nen paar Millionen Werte werden... und zudem kann OpenGL sowieso nix mit Double Werten anfangen :P

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 17.06.03 19:47 
Also das ARRAY braucht den Platz sofort komplett, mit Pointern brauchst Du wahrscheinlich nur den Platz einer Variable, also 1mal Single statt der Million Singles !!! Pointer wären also auf jeden Fall vorzuziehen. Und von der Geschwindigkeit sind Pointer allemal die beste Lösung. Wenns nicht stimmt, nicht hauen. Pointer in Pascal können schon sehr schwierig sein. :shock:

_________________
Gruß
Hansa
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 17.06.03 19:55 
hansa hat folgendes geschrieben:
Also das ARRAY braucht den Platz sofort komplett, mit Pointern brauchst Du wahrscheinlich nur den Platz einer Variable, also 1mal Single statt der Million Singles !!!

Nein, denn ich brauche in jedem falle 1.000.000 verschiedene Werte = Auch mit Pointern würde ich genausoviel Speicher belegen ;)

_________________
Aya
I aim for my endless dreams and I know they will come true!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 17.06.03 20:08 
Aya hat folgendes geschrieben:
Wenn ich einen Array[1..1000, 1..000] of Single habe, gibt es da eine schnellere Methode um zu überprüfen ob ein Feld <>0 ist als:


Im Array belegst Du doch den Speicherbereich sofort. Bei Pointern hast Du einen Wert und eine Adresse, für den nächsten Wert usw. Hierzu brauchs Du den Speicherplatz des Wertes also Single und dann noch die Adresse für den nächsten. Da liest du wieder den Wert bei <> 0 anhand der Adresse und so weiter und weiter. Die überprüften (unnützen) Werte gibst Du einfach mit Dispose wieder frei. Oder ist das nicht mehr so und ich bin doch im falschen Film ?

_________________
Gruß
Hansa