next up previous contents
Next: Literatur Up: Verfolgungsprobleme Previous: Der Hyperbolische Treffer

Simulation einer Verfolgung mit Java

 

Die folgenden Ausführungen sollen allen, die auf den Geschmack gekommen sind und sich nun selbst am Programmieren von Verfolgungsproblemen in Java versuchen möchten, als ein erster Einstieg dienen. Die nötigen Kenntnisse wollen wir am Beispiel der Verfolgerkurve nach Bouguer erarbeiten. Unser Endprodukt wird folgendes Beispiel-Applet sein:

Applet: Beispiel-Applet.

Bevor wir uns an die Java-spezifische Programmierung wagen, wollen wir uns ein allgemeines Konzept zur Darstellung von Verfolgungsvorgängen am Bildschirm zurechtlegen:

Eine Verfolgung ist eine kontinuierliche Bewegung und kann als diese von uns am Computer nicht exakt simuliert werden, da ein Computerprogramm pro Zeitintervall nur eine endliche Anzahl von Verfolger- und Zielpositionen errechnen kann. Mit Hilfe des Eulerverfahrens können wir die reale Verfolgerbahn nach Bouguer jedoch befriedigend nahe numerisch approximieren. Wir zerlegen hierzu die Zeit in gleich große Intervalle. Innerhalb eines Zeitintervalls Z schicken wir unsere Akteure linear in die ihnen vorgegebenen Richtungen (das Ziel entlang der Zielgeraden, den Verfolger in Richtung des Ziels), an den Intervallgrenzen orientieren wir dann den Verfolger und das Ziel erneut in die vorgegebenen Richtungen. Die Geschwindigkeiten u des Ziels und v des Verfolgers geben wir dabei in Pixel pro Zeitintervall (Pixel/Z) an, so daß der Weg (in Pixel) der Akteure zwischen zwei Intervallgrenzen betragsmäßig mit diesen Geschwindigkeiten übereinstimmt. Am Bildschirm ergibt sich demnach folgendes Bild:

Applet: Approximation der Verfolgerbahn.

Programmiertechnisch wird das Eulerverfahren in diesem Applet durch eine Schleife realisiert, wobei ein Schleifendurchlauf als ein Zeitintervall gewertet wird. In der Schleife wird zuerst die neue Zielposition (xQ, yQ) errechnet:

                   xQ += u .
Daraus errechnet sich die neue Verfolgerposition (xP,yP) in Richtung dieser Zielposition wie folgt:
                   xP += v * (xQ-xP)/d(P,Q) ,
                   yP += v * (yQ-yP)/d(P,Q) .
Mit d(P,Q) sei dabei der aktuelle Abstand der Akteure bezeichnet. Feine Zerlegungen der Zeit, die die beste Approximationsgüte versprechen, werden folglich durch niedrige Geschwindigkeitsvorgaben bewerkstelligt. Da nicht die absoluten Geschwindigkeiten der Akteure entscheidend für den Kurvenverlauf sind, sondern deren Verhältnis zueinander, ist diese Variation der Geschwindigkeiten zur Güteverbesserung legitim, solange das angesprochene Verhältnis u:v beibehalten wird.

Soeben wurde von uns zuerst die neue Zielposition berechnet, dann erst die neue Verfolgerposition in Bezug auf diese. Da dies völlig willkürlich geschah, wollen wir nun auch den Verfolger als ersten auf den Kurs schicken. Im Applet können wir beide Bahnen miteinander vergleichen.

Applet: Güte der Approximation.

Die exakte Verfolgerbahn wird zwischen den beiden auf diese Weise erhaltenen Polygonzügen liegen, so daß uns das obige Applet durch Variation der Diskretisationsweite v einen Hinweis auf die Güte der Approximation liefern kann. Wählen wir als Verfolgergeschwindigkeit 12 Pixel/Z im Auswahlfeld, können wir die beiden Kurven noch deutlich voneinander unterscheiden. Bei 4 Pixel/Z gelingt uns dies mit bloßem Auge schon nicht mehr. Diese Diskretisationsweite genügt unseren Anforderungen als Bildschirmsimulation also bei weitem.

Da es sehr großer Zufall wäre, wenn Verfolger- und Zielposition zum Fangzeitpunkt trotz Approximation exakt übereinstimmen würden, müssen wir uns ein Abbruchkriterium zurechtlegen. Im Applet werden unsere Akteure als Kreise mit einem bestimmten Radius r (in Pixel) dargestellt. Deshalb macht es Sinn, die Beute als gefangen zu betrachten, sobald der Verfolger vom Ziel einen Abstand kleiner als r hat. Wir notieren also: Verfolgung stoppen, falls d(P,Q)<r.

Aber Vorsicht! Dieses Abbruchkriterium schlägt eventuell fehl, wenn die Diskretisationsweite v größer oder gleich 2r Pixel/Z ist. In diesem Fall ist es wahrscheinlich, daß der Verfolger über das Ziel hinausschießt. Durch einen geeigneten Programmautomatismus, der die Diskretisationsweite v beim Eindringen des Verfolgers in eine gewisse kreisförmige Umgebung des Ziels (d(P,Q)<v) dem Radius r geeignet anpaßt, kann dieses Problem bei Bedarf jedoch gelöst werden.

Nachdem wir uns nun über den allgemeinen Programmablauf der Simulation im Klaren sind, können wir uns an die Veröffentlichung unserer Verfolgung in Java wagen. Dazu sind grundsätzlich drei Schritte nötig:

* Erstellen eines Java Quellcodes:
Der dokumentierte Quellcode unseres Beispielapplets BeispielApplet.java dient uns als erste Vorlage beim Erstellen des Java Quellcodes. Wir schreiben den Quellcode mit einem beliebigen Texteditor ab und speichern ihn unter dem Namen (den wir im Quellcode unserer (Haupt-)klasse gegeben haben) BeispielApplet mit der Extension .java ab. Durch Abändern der run()-Methode kann die Verfolgerkurve später ohne großen Aufwand in eine Traktrixkurve oder eine beliebige andere Verfolgungskurve umgewandelt werden.
* Kompilieren des Quellcodes:
Zum Kompilieren des Quellcodes benötigen wir einen Java-Compiler. (Haben Sie noch keinen zur Verfügung, können Sie sich für nichtkommerzielle Zwecke das Java Developers Kit (JDK) von Sun über das Internet kostenlos herunterladen.) Von der DOS-Ebene aus kompilieren wir nun im JDK-Verzeichnis mit dem Befehl
  C:\Pfad>javac BeispielApplet.java
unseren Quellcode. Die fertig kompilierte Datei erhält vom Compiler den Namen des Quellcodes mit der Extension .class
(also: BeispielApplet.class).
* Einbinden der kompilierten Klasse in eine HTML-Datei:
Da diese

Datei im Beispiel ausschließlich dazu dient, das Applet aufzurufen, können wir uns auf eine absolute Minimalversion beschränken.

  <html>
  <applet code="BeispielApplet.class" width=300 height=250>
  </applet>
  </html>
Abschließend speichern wir diesen HTML-Text mit der Extension .htm beziehungsweise .html im selben Verzeichnis ab, in dem bereits die Datei BeispielApplet.class liegt. Nun steht unserem WWW-Vergnügen nichts mehr im Wege. Wir öffnen die HTML-Datei in einem beliebigen Internetbrowser und können unser Beispielapplet betrachten.


next up previous contents
Next: Literatur Up: Verfolgungsprobleme Previous: Der Hyperbolische Treffer
Susanne Neuhaeusler
12/18/1997