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
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".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.