[GELÖST] Position in linearer Map

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Farbfinsternis

Betreff: [GELÖST] Position in linearer Map

BeitragSa, Jun 18, 2011 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich ist die Antwort extrem banal, aber ich rupfe mir seit zwei Tagen die nicht vorhandenen Haare aus und komme nicht drauf.

Ich habe einen Speicherbereich in dem 4Byte lange Werte drin stehen. Dieser Speicherbereich stellt eine 2D Karte dar in der alle Zeilen hintereinander liegen. Mein Problem ist nun: wie berechne ich die Position x,y? Ich weiß wie breit die Zeilen sind und wieviele es sind und dass eine Zelle 4Byte gross ist.

Jemand eine Idee?
Farbfinsternis.tv
  • Zuletzt bearbeitet von Farbfinsternis am Sa, Jun 18, 2011 18:34, insgesamt einmal bearbeitet

Der Eisvogel

BeitragSa, Jun 18, 2011 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nehmen wir an dein Speicher ist 20 Zellen lang, also 20 * 4 = 80 Byte.
Wir wissen, dass das Feld 5 Zellen breit ist und 4 Zellen lang/hoch.
Nehmen wir einen Variable c die für jede Zelle um eins erhöht wird. Erste Zelle c = 0, letzte Zelle c = 19

Die X-Koordinate ist von der Zelle ist jetzt immer x = c Mod width. Die Y-Koordinate ist immer y = Floor(c / width).
Ein Beispiel: Wir lesen Zelle 23 aus, also c = 22
x = 22 Mod 5 = 2
y = Floor(c / 5) = 4

Ich hoffe das ist was du suchst.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Midimaster

BeitragSa, Jun 18, 2011 10:21
Antworten mit Zitat
Benutzer-Profile anzeigen
also das hört sich sehr nach TBank an.

Mit LoadBank kannst Du die Daten in einen Memorybereich hereinladen.

Mit PeekLong(Adresse) jeweils 4 Bytes daraus abholen.

Die Adresse einer Speicherstelle ist immer (Y*Breite + X)*4


BlitzBasic: [AUSKLAPPEN]

Bank:TBank=LoadBank("...")

For Y=0 To Hoehe
For X=0 To Breite
Wert[X,Y] = Bank.PeekLong((Y*Breite + X)*4)
Next
Next


oder anders herum:

BlitzBasic: [AUSKLAPPEN]

Bank:TBank=LoadBank("...")

For Pos=0 To Bank.Size Step 4
X= ( Pos/4 ) Mod Breite
Y= ( Pos /4) /Breite
Wert[X,Y] = Bank.PeekLong(Pos)
Next
  • Zuletzt bearbeitet von Midimaster am Sa, Jun 18, 2011 10:29, insgesamt einmal bearbeitet

Farbfinsternis

BeitragSa, Jun 18, 2011 10:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich habe ich mich blöd ausgedrückt. Gegeben ist mir der besagte Speicher und die Variablen "column" und "row". Ich muss nun die Speicherzelle finden die dem entspricht.

@Midimaster: Das hat nichts mit BB/BMax zu tun, darum habe ich es in Offtopic gesteckt Wink
Farbfinsternis.tv

Midimaster

BeitragSa, Jun 18, 2011 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab ja auch nur die Code-Box benutzt, damit der Code nach Code aussieht. Das System bleibt doch immer das gleiche...

BlitzBasic: [AUSKLAPPEN]
Pos= 4 *( (Breite*Row) + Column ) 

Farbfinsternis

BeitragSa, Jun 18, 2011 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke schön Jungs, hat mir sehr geholfen! Smile
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group