Riesen Array Problem

Für allgemeine Fragen zur Programmierung mit PureBasic.
lol
Beiträge: 18
Registriert: 17.01.2006 13:46
Wohnort: Borken
Kontaktdaten:

Riesen Array Problem

Beitrag von lol »

Hallo Gemeinde!
Ich hab ein riesen Problem..
also ich bin zu 8 % mit meinem ODE - Wrapper fertig, nun
ärgert mich etwas....

Also: Als Parameter soll man ein Array - aabb[6] eingeben.
Wie soll man das in Purebasic übersetzen?
Im aabb Array soll minx, maxx, miny, maxy, minz, maxz angegeben werden.
Ich verstehs (noch) nicht, wie mans konventieren soll..

Also dies hier nur zum Testen, wie ich den Aufbau bissher verstanden habe:

Code: Alles auswählen

Structure aabb
minx.d
maxx.d
miny.d
maxy.d
minz.d
maxz.d
EndStructure

aabb.aabb
aabb\minx = 1
aabb\maxx = 10
aabb\miny = 2
aabb\maxy = 20
aabb\minz = 3
aabb\maxz = 30

Procedure.d Ode_GeomGetAABB(GeomID,aabb2) 
 ProcedureReturn aabb2
EndProcedure 

 Debug Ode_GeomGetAABB(0,aabb) 

;-----------
;-Die Ori - Procedure ist:

;-ODE_API void dGeomGetAABB(dGeomIDgeom,dReal aabb[6])  
;-The aabb array has elements (minx, maxx, miny, maxy, minz, maxz)
;------------
Nur... Im Debugger steht nur der Pointer, statt die ganzen Werte, ( ist mir schon klar )
Aber ich will jedes Feld von minx bis maxz in nur einem Array speichern wie es die Ori - Procedure hat, so dass ich nicht zum aufrufen der Werte aabb\minx usw. angeben muss, sonderen nur z.b. aabb, da sonst die ganze Geschichte nicht klappt, da die Funktion nur 2 Parameter zulässt, statt die 5 weiten. Könnte man dass den so umschreiben dass man evtl. doch mehr Parameter benutzen könnte? Dann wär dieses Problem schon erledigt, nur, ich denk mal das geht nicht, da die Ori - Procedure nur in der DLL ist.
( Es gibt wohl paar wege, aber die sind mir zu kompliziert + kein C Compiler usw... )






Hm... hoff mal das ich das einigermaßen erklären konnte!


Danke für jede Antwort![/code]
Zuletzt geändert von lol am 03.10.2006 12:31, insgesamt 1-mal geändert.
Grüße alle die ich kenne!
-----------------------------

PureBasic v. 4.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du hast ne Menge Zeugs in deiner Sig stehen , leider nicht ob du PB 4.0
benutzt, denn dort kannst du auch Arrays an eine Procedure uebergeben.
Wenn nicht versuch mal *aabb2.aabb.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@lol

denke doch bitte dran, in deinen posts code-tags zu setzen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
lol
Beiträge: 18
Registriert: 17.01.2006 13:46
Wohnort: Borken
Kontaktdaten:

Beitrag von lol »

Erstmal danke für die Antworten:

So, Code Tags gesetzt, ( vergessen ^^ )
Benutze natürlich PB 4, steht nun in der kurzen
Signatur drin.

- ? *aabb.aabb ?
Mal schaun ob dies klappen wird, aber ich denk mal nicht...
Danke aber!

Ich habs schon mit Dim, und DataSection probiert,leider noch
ohne Erfolg, aber ich bin noch dabei.. mal sehn obs klappen wird!
Grüße alle die ich kenne!
-----------------------------

PureBasic v. 4.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

lol hat geschrieben: Benutze natürlich PB 4, steht nun in der kurzen
Signatur drin.
:allright:

Versuch es mal so

Beispiel:

Code: Alles auswählen

Dim aabb.d(5)

aabb(0) = 1
aabb(1) = 10
aabb(2) = 2
aabb(3) = 20
aabb(4) = 3
aabb(5) = 30

Procedure.d Ode_GeomGetAABB(GeomID,aabb2.d(1)) ; die 1 steht fuer die anzahl der dimensionen , ist kein index
  
  Debug aabb2(0)
  Debug aabb2(1)
  Debug aabb2(2)
  Debug aabb2(3)
  Debug aabb2(4)
  Debug aabb2(5)
  
  ProcedureReturn 
EndProcedure

Debug Ode_GeomGetAABB(0,aabb())
oder so

Code: Alles auswählen

Structure aabb
  minx.d
  maxx.d
  miny.d
  maxy.d
  minz.d
  maxz.d
EndStructure

aabb.aabb
aabb\minx = 1
aabb\maxx = 10
aabb\miny = 2
aabb\maxy = 20
aabb\minz = 3
aabb\maxz = 30

Procedure.d Ode_GeomGetAABB(GeomID,*aabb2.aabb)
  Debug *aabb2\minx
  Debug *aabb2\minx
  Debug *aabb2\maxx
  Debug *aabb2\miny
  Debug *aabb2\maxy
  Debug *aabb2\minz
  Debug *aabb2\maxz
  ProcedureReturn aabb2
EndProcedure

Debug Ode_GeomGetAABB(0,@aabb)

Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wird denn im original der Pointer übergeben, oder die Werte?

wie edel schon sagte, man sollte ja Arrays übergeben können...

Code: Alles auswählen

Dim aabb.d(5)
aabb(0) = 1 
aabb(1) = 10 
aabb(2) = 2 
aabb(3) = 20 
aabb(4) = 3 
aabb(5) = 30 

dGeomGetAABB( GeomID, aabb() )  
(grad so runtergetippt, kein gewehr)

[edit]
schau an... edel war schneller und umfangreicher...
hat früher angefangen... XD
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

da steht doch 'Get' dabei, sollte es da nicht eher heissen :

Code: Alles auswählen

Debug Ode_GeomGetAABB(0,@aabb.aabb) 
Debug aabb\minx
Debug aabb\minx
Debug aabb\maxx
Debug aabb\miny
Debug aabb\maxy
Debug aabb\minz
Debug aabb\maxz
?
lol
Beiträge: 18
Registriert: 17.01.2006 13:46
Wohnort: Borken
Kontaktdaten:

Beitrag von lol »

Coool, danke, aber... hm.. mal sehn, eigentlich wollte ich das nicht so
per Dim lösen, hatte ich die ganze Zeit im Kopf, aber ich dachte
es gäb wohl noch eine andere Lösung...
Aber ich glaub damit muss ich mich wohl geschlagen geben...



/Edit:

Ähm... irgendwie bringt ihr mich beide toootal durcheiander, ich wollte
gar nicht die einzelen Werte ausgeben haben, sondern die Werte in EINEM
einzigen Array Speichern, also:

In Array aabb 1,10,2,20,3,30 - also das absolute gegenteil von Edel, SRY!
Das mit dem Debug aabb2(0) usw. kannte ich bereits, aber das will ich ja gerade eben nicht haben, da ich dann aabb2(0) - aabb2(5) eingeben muss, und das soll möglichst in einem Array sein, wie oben schon versucht zu beschreiben.

Und Kaeru Gaman,
das war meine erste Idee wie ich ans Problem ran gehn wollte, aber
die Procedure gibt mir ja nur den Pointer zurück statt die ganzen Werte...

Danke euch beiden aber!


Was die Procedure wieder geben soll:

Return the axis-aligned bounding box.

Return in aabb an axis aligned bounding box that surrounds the given geom. The aabb array has elements (minx, maxx, miny, maxy, minz, maxz). If the geom is a space, a bounding box that surrounds all contained geoms is returned.

This function may return a pre-computed cached bounding box, if it can determine that the geom has not moved since the last time the bounding box was computed.




wie soll ich das nur erklären..

Also... :

Ich will ja die Procedure Ode_GeomGetAABB(...) haben,
der erste Parameter ist die ID des Geom´s, das zweite ist
wahrscheihnlich eine "verschachelte" Array, oder wie das heisst..
Also eine Array wo alle Werte drin sind, die direkt auslesbar ist,
ohne die genaueren angaben welche Werte man auslesen soll.

Also mein Array aabb enthält ja minx bis maxz ( 6 Stück. )
Dieses Array will ich direkt auslesen, nicht einzelt wie
aabb\minx oder aabb\maxz ... da es sonst unbrauch bar ist,
da ich maximal 2 Parameter angeben kann.

Ich glaub ich kanns nicht erklären, hoffe ihr Versteht es trotzdem!

DANKE !!!
Grüße alle die ich kenne!
-----------------------------

PureBasic v. 4.00
lol
Beiträge: 18
Registriert: 17.01.2006 13:46
Wohnort: Borken
Kontaktdaten:

Beitrag von lol »

OH MAN!!!!!

DA STEHT JA "GET" !!!

Ich dachte Set...

oh man.... schon ein Schritt vorraus...

Danke edel und Kaeru Gaman!
War mein dummer Fehler, hab mich total verlesen, dann passt es ja eigentlich so wie es aussieht, oder ich bin wieder total auf dem
Falschen Weg, wer weiss....

Super aber danke!!

/Edit:

Ich versteh die Welt nicht mehr...

Also wenn ihr es nun noch schaft alle Werte in nur einem Array (auszulesen und) zu speichern, dann lass ich euch in Ruhe...
( Obwohl ihr das ja eigentlich ja schon hattet oder ?? )
Sorry, bin gerade irgendwie total durcheinander!

Aber ich glaub das reicht auch.. man, lieber aus Ohr haun, noch müde von gestern ^^

Danke!
Zuletzt geändert von lol am 03.10.2006 13:13, insgesamt 1-mal geändert.
Grüße alle die ich kenne!
-----------------------------

PureBasic v. 4.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> da ich dann aabb2(0) - aabb2(5) eingeben muss, und das soll möglichst in einem Array sein

widerspricht sich direkt.
aabb2(0) - aabb2(5) ist definitiv ein Array.

bei einem Array musst du immer einen Index angeben, wenn du an einen einzelnen wert willst.
auch in C, da schreibt sicht dann eben etwas anders...
eine struct ist ähnlich aufgebaut im speicher (nein, eigentlich sogar identisch),
nur erfolgt dort der zugriff auf das einzelne feld eben nicht per Index,
sondern per Suffix (z.b. aabb\minx)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten