Forum: PC-Programmierung Fragen zur Verwaltung von Pointern, structs und Listen in C.


von Johannes (Gast)


Lesenswert?

Moin!

Ich programmiere im Moment ein SPH- (smoothed particle hydrodynamics) 
Programm. Dabei wird eine Flüssigkeit durch einzelne Partikel simuliert. 
Die Partikel habe ich als struct mit Geschwindigkeit, Position, usw. als 
Parameter programmiert. Jedes Partikel weißt zudem noch auf das nächste 
Partikel (single linked list).

Ich habe also eine große Liste, in der alle Partikel drin hängen. Für 
die Berechnung der Kräfte auf ein bestimmtes Partikel werden nur 
Partikel herangezogen, die sich in räumlicher Nähe zu diesem Partikel 
befinden. Hier stehe ich jetzt auf dem Schlauch:

Ich übergebe der Funktion "findeNachbarn" einen Pointer auf die große 
Liste und einen Pointer auf das Partikel zudem die Nachbarn gefunden 
werden sollen. Die Funktion soll nun eine neue Liste erstellen die nur 
noch die Nachbarn enthält, dabei aber die "große Liste" unverändert 
lässt.
Muss ich für die Nachbarliste neuen Speicherplatz allozieren, oder kann 
ich weiter mit Pointern arbeiten? Was ist am besten?

Ich denke das Problem ist, das die Partikel sozusagen noch für die 
eigene Verwaltung zuständig sind. Wäre es vielleicht schlauer eine 
"Überstruktur" zu implementieren, die die Pointer auf die Partikel 
verwaltet? Wie würdet ihr das lösen?

MfG,
 Johannes

von Arc N. (arc)


Lesenswert?

http://de.wikipedia.org/wiki/Smoothed_Particle_Hydrodynamics
dann wären für die Suche nach den Nachbarn andere Datenstrukturen besser 
geeignet: k-d-Tree, Octree, BSP-Tree, Range Tree
Oder (habe das Verfahren nur überflogen) die Nachbarn, die zur 
Berechnung herangezogen werden, direkt in passende Strukturen 
"einsortieren".

von *char (Gast)


Lesenswert?

Johannes schrieb:
> Muss ich für die Nachbarliste neuen Speicherplatz allozieren, oder kann
> ich weiter mit Pointern arbeiten? Was ist am besten?

wenn du dein Ziel weiter verfolgen willst, kannst du eine verkettete 
Liste von pointern verwenden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.