![]() |
Re: Teilchensimulator in Echtzeit
Ok, also nochmal...
Das Punkte übersprungen werden will ich NICHT, denn je nach Geschwindigkeit werden die übersprungene Distanz größer. Angenommen ein Teilchen hat die Geschwindigkeit 100. Dann würde das Teilchen bei jeder berechnung 99 Pixel einfach auslassen. Was mir daran nicht gefällt: 1. es wird eine ruckelige Angelegenheit 2. das Teilchen würde bei jeder Position ein anderes Teilchen beeinflussen und auch selbst beeinflusst werden. Befindet es sich auf Position 10 und springt plötzlich auf 20 werden 9 Einfluss-Berechnungen nicht berücksichtigt. Apropos: wieso kommt das praktisch nie vor, das ein Teilchen übersprungen wird? |
Re: Teilchensimulator in Echtzeit
AHHHHH
jetzt kapier ich, was du meinst... die Positionen updaten, unter berücksichtigung von DeltaT: Ich führe ein Update durch mit z.B. Geschwindigkeit 10, da allerdings z.B. nur 1/100 sek vergangen sind, beträgt die neue Position z.B +10/100 Schade, das hätte ich nach dem 5. Beitrag gebraucht :D aber danke... |
Re: Teilchensimulator in Echtzeit
Kuck mal in der Freeware oder OpenSource Sparte, da hatte mal jemand so ein Programm vorgestellt.
|
Re: Teilchensimulator in Echtzeit
so ein programm gabs hier doch schonmal oder?
vielleicht mal suchen... |
Re: Teilchensimulator in Echtzeit
ja genau. das rechnen mit Fließkomma (für die genauigkeit auch bei kleinen zeitschritten) und beim anzeigen auf integers runden.
übersprungen wird dabei nichts, es sei denn du hast tausende von punkten oder machst ne gigantische grafische darstellung. bei ersterem wäre dann die überlegung, doch nicht echtzeit zu gehen, bei zweitrem ist das motto optimieren, optimieren, optimieren. aber ohne visualisierung solltest du millionen von durchgängen pro sekunde schaffen. das heißt, in einer sekunde müsste mehr als ne million pixel zurückgelegt werden, damit nich jeder berechnet wird (unwahrscheinlich). |
Re: Teilchensimulator in Echtzeit
Was er will ist das ausgehend vom nächsten anzusteuerenden Pixel der Flugbahnen der Zeitpunkt der Neuberechnung ermittelt wird. Statt also alle Bahnen mit fester zeitlicher Schrittweite zu berechnen, möchte er eine Formel haben wie man auf Grund einer festen geographischen Schrittweite == Pixelraster, den Zeitpunkt des Ausführens dieses Schrittes zu ermitteln.
Gut, das geht zu machen und würde die geammte Simulation enorm beschleunigen, da man so direkt auf die grobe Auflösung der gepixelten Anzeige direkt Bild für Bild berechnen kann. Statt also alle Bahnen permanent bei jedem zeitlichen Schritt erneut zu berechnen und somit in der Anzeige unsinnige 0-Pixel Bewegungen zu berechnen, wird bei dieser Methode immer zu einem Zeitpunkt nur die Pixel neu beerechnet die sich auch tatsächlich ändern würden. Man berechnet ausgehend von der aktuellen Pixelkoordinate die nächste zu setzende Pixelkoordinate + den Zeitpunkt dazu. Der Zeitpunkt ist relativ zu einer Einheitszeit. Die Einheitszeit ist mindestens so klein wir die kleinste zeitliche Schrittweite der schnellsten Bewegung innnerhalb der Flugbahnen. Man baut eine Liste von zu löschenden und zu setzenden Pixelkoordinaten auf zu denen ein Timerwert gespeichert wird. Dieser Timerwert wird pro Einheitszeit um1 dekrementiert. Sobald dieser Wert 0 erreicht wird der alte Pixel gelöscht der neue Pixel an der neuen Koordinate gesetzt und auf Grund der Formel der Bewegungsbahn der nächste zu setzende Pixel berechnet samt seinem Counter. Diese Vorgehensweise ist ideal für Priority Listen geeignet und erlaubt die freie Scalierung der Bewegungsabläufe auf untersichiedliche Rasterungen. Zudem ist die in fakt die Methode die die Simulation am schnellsten ausführen wird, aber eben OHNE an Informationen einzubüsen. Der Weg dahin ist relativ einfach. Angenommen du hast eine Formel die zu einem Zeitpunkt die Pixelkoordinaten berechnet. Diese Formel wird nun so umgestellt das sie den Zeitpunkt = Schrittweite zur nächsten Pixelkoordinate berechnet. Damit dies funktioniert wird einfach eine virtuelle Einheitszeit eingeführt. Die zeitliche Schrittweite zur nächsten Pixelkoordinate wird durch diese Einheitszeit dividiert und ergibt den Counter für die List der abzuarbeitenden Pixelkoordinaten. Nun hat man einen einzigsten Timer der im Takt der Einheitszeit arbeitet. Bei jedem Ereignis werden die Zähler in der Priority Liste um 1 dekrementiert. Geht ein Zähle auf 0 so ist der exakte Zeitpunkt eingetreten um nun den Pixel zu setzen. Die Koordinaten dieses Pixel werden aus der Priority List gelöscht und in die Lister der nächsten Berechnungen eingefügt. So arbeitet man die Priority Liste komplett ab. Danach kommt die Berechnungs-Liste dran. In dieser stehen die Formeln der Bewegungsbahnen und deren letzer gerade abgearbeiteter Pixelkoordinate. Nun wird diese Liste abgearbeitet indem man die nächsten Pixelkoordinaten + Zeitpunkt berechnet und die neue Koordinate in die Priority List sortiert nach Zähler eingefügt. Dies geht alles iterativ. Gruß hagen |
Re: Teilchensimulator in Echtzeit
Zitat:
![]() |
Re: Teilchensimulator in Echtzeit
@Hagen
das sieht schon ganz ähnlich nach meinem Ansatz aus. Vielen Dank, ich werde beide Ansätze mal ausprobieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz