Servus,
Ich möchte einen elastischen Stoß zwischen 3 oder mehr kugelförmigen Objekten gleicher Masse in PB umsetzen. Das ganze ist in etwa so aufgebaut:
http://img12.imageshack.us/img12/6389/stoss.jpg
Körper A erhält einen Impuls und stößt an die ruhenden Körper B und C.
Den physikalischen Ablauf hab ich in eine Prozedur gepackt, die in Abhängigkeit vom Winkel zwischen den Körpern die X- und Y-Komponente des Impulses umrechnet und von einer Kugel auf die andere überträgt.
Nun zu meinem Problem:
Da ich alle Kugeln in einer Schleife einzeln abarbeite erhält diejenige, für die ich zuerst diese Prozedur aufrufe auch den höheren Impuls. Ich möchte allerdings, dass die Übertragung gleichzeitig abläuft und B und C somit auch den selben Impuls erhalten.
Kann mir einer hier ein wenig auf die Sprünge helfen wie ich das in einem Programm realisieren kann?
Vielen Dank im Voraus,
Ruskie
Elastischen Stoß in PB umsetzen
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ähm NEIN keine threads für sowas.
... außer du willst eine richtige OOP umgebung schaffen für zig objekte die physikalisch aufeinander reagieren,
dann darfst du allerdings auch riesenarbeit in die synchronisation stecken.
dein problem dürfte sein, dass du Werte die den Objekten zugeordnet sind direkt veränderst.
schaffe dir Wertebuffer für die Objekte.
sagen wir mal, du hast eine Größe in deinem Objekt für Speed.
also so in etwa:
wenn du jetzt bei mehreren Objekten in Abhängigkeit voneinander die Speed verändern wolltest,
hättest du ja das Problem, dass du beim ersten Objekt die Speed schon geändert hast,
und wenn du dann fürs zweite Objekt darauf Bezug nimmst, würdest du schon mit dem neuen Speed rechnen.
also verändere deine Struct folgendermaßen:
wenn du jetzt die neue Speed ausrechnest, schreibst du die nicht zurück in Speed, sondern schreibst sie in SpeedNew.
für alle anderen Objekte steht dir jetzt noch die alte Speed in der Zelle Speed zur Verfügung.
erst wenn du alle Objekte durchgegangen bist, überträgst du die Werte,
d.h. du gehst dann nochmal alle Objekte durch, und dabei führst du nur jeweils \Speed = \SpeedNew aus.
das macht man ganz allgemein so für mehrere Objekte die einander beeinflussen,
auch für Conway's würde man mit dieser Art doppeltem Buffer arbeiten.
... außer du willst eine richtige OOP umgebung schaffen für zig objekte die physikalisch aufeinander reagieren,
dann darfst du allerdings auch riesenarbeit in die synchronisation stecken.
dein problem dürfte sein, dass du Werte die den Objekten zugeordnet sind direkt veränderst.
schaffe dir Wertebuffer für die Objekte.
sagen wir mal, du hast eine Größe in deinem Objekt für Speed.
also so in etwa:
Code: Alles auswählen
Structure Kugel
PosX.d
PosY.d
Speed.d
EndStructure
hättest du ja das Problem, dass du beim ersten Objekt die Speed schon geändert hast,
und wenn du dann fürs zweite Objekt darauf Bezug nimmst, würdest du schon mit dem neuen Speed rechnen.
also verändere deine Struct folgendermaßen:
Code: Alles auswählen
Structure Kugel
PosX.d
PosY.d
Speed.d
SpeedNew.d
EndStructure
für alle anderen Objekte steht dir jetzt noch die alte Speed in der Zelle Speed zur Verfügung.
erst wenn du alle Objekte durchgegangen bist, überträgst du die Werte,
d.h. du gehst dann nochmal alle Objekte durch, und dabei führst du nur jeweils \Speed = \SpeedNew aus.
das macht man ganz allgemein so für mehrere Objekte die einander beeinflussen,
auch für Conway's würde man mit dieser Art doppeltem Buffer arbeiten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.