
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:
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:
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.
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:
|