Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
|
Re: Teilchensimulator in Echtzeit
10. Nov 2004, 21:01
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
|