2017-10-26 6 views
1

Ich schreibe einen Code, um Partikelbewegung zu simulieren. (derzeit 2D bald hoffentlich 3D) Die Sache ist, wenn ich eine relativ große Zeitschritt Teilchen am Ende durch einander passiere.Partikel, die sich gegenseitig durchlaufen

Haben Sie Vorschläge, die es mir erlauben würden, das zu korrigieren, ohne einen wirklich kleinen Schritt zu machen? (es ist in C++, wenn das viel Unterschied macht).

+1

Bitte berücksichtigen Sie, fügen Sie Ihren Code hinzu, um zu sehen, was der beste Ansatz ist. – sirandy

Antwort

0

Sie müssen also eine Art von collision detection tun, um zu sehen, ob zwei Objekte kollidieren würden.

Abhängig von Ihrer Datenstruktur könnte die Erkennung viele Formen annehmen. Wenn Sie nur eine Liste von Punkten haben, müssten Sie alle in N^2 jeden Schritt für das Partikel gegeneinander überprüfen (Hinzufügen des Bewegungsvektors, um einen größeren räumlichen Fußabdruck zu erstellen). Dies könnte durch den GJK Algorithmus erfolgen.

Die Verwendung einiger räumlicher Datenstrukturen könnte die Komplexität reduzieren, indem das GJK nur mit einem überarbeiteten Satz von Partikeln ausgeführt wird, d. H. Es muss nicht überprüft werden, ob sie sich überlappen könnten.

+0

danke für den Vorschlag werde ich wissen, implementieren und sehen, ob die Kosten die Kosten überwiegen oder nicht :-) – john

0

Die use of timestep to advance the clock introduces model artifacts die die Modellgültigkeit zerstören kann, wie es in Ihrem Fall passiert. Verwenden Sie stattdessen die diskrete Ereignisplanung. Diese paper from Winter Simulation Conference 2005 beschreibt, wie Bewegung in einem diskreten Ereignisrahmen implementiert wird. Ihr Modell wird nicht nur genauer sein, es wird wahrscheinlich auch viel schneller laufen.

+0

danke für den Vorschlag werde ich wissen implementieren und sehen, ob der Aufwand die Kosten überwiegt oder nicht :-) – john

Verwandte Themen