[previous][map][next]

6 Allgemeiner Fall

6.1 Berechnung eines Gleises durch zwei Punkte

Gegeben:
 
P1 (x1, y1) Koordinaten des Startpunktes P1
a1 Richtungswinkel des Gleises in diesem Punkt
R1 Radius in Punkt P1
P2 (x2, y2) Koordinaten des Endpunktes P2
a2 Richtungswinkel des Gleises in diesem Punkt
R2 Radius in Punkt P2
Gesucht:
 
Geometrie-Elemente, die zwei Punkte miteinander verbinden.
Die komplette Berechnung von Trassen läßt sich auf die Einrechnung eines Gleises durch zwei Punkte zurückführen. Von diesen Zwangspunkten kennt man die Koordinaten. Außerdem ist die Richtung und die Krümmung des Gleises in den Punkten vorgegeben. Anhand der Krümmung lässt sich die Art der Einrechnung festlegen. Man unterscheidet zwischen folgenden Übergängen:
Je nach Krümmung in den Zwangspunkten wird einer der bereits besprochenen Algorithmen verwendet. Die Punkte werden der Funktion übergeben, sie entscheidet dann, welcher Fall vorliegt und wählt den entsprechenden Algorithmus aus. Dieser berechnet das Rail und liefert es der Funktion zurück, welche es dann an den Aufrufer weiterleitet.

6.2 Modifikation eines Gleispunktes

Neben der Einrechnung neuer Trassen durch Zwangspunkte spielt auch die Modifikation bestehender Streckenverläufe eine wichtige Rolle. Soll ein Gleis durch einen Zwangspunkt verlaufen, so müssen die angrenzenden Geometrie-Elemente neu berechnet werden. Wird vom Anwender der Punkt P2 nach P2` verschoben, so muß eine neue Trasse berechnet werden. Es wird dabei eine Trasse zwischen den Punkten P1 und P2' sowie von P2' nach P3 berechnet. Neben der Lage kann auch noch die Richtung und die Krümmung in P2' geändert werden.
Nach dem eine Einrechnung stattgefunden hat, ist die Position der Deko-Elemente neu zu bestimmen. Durch die Modifikation des Gleises ändert sich auch dessen Länge. Da die Position der Deko-Elemente jedoch relativ zum Anfang des Gleises festgelegt ist, müssen diese neu berechnet werden. Im Bereich zwischen P1 und P3 wird die Position der Elemente auf die neue Länge skaliert. Nach P3 muß die Änderung der Streckenlänge zur aktuellen Position der Deko-Elemente addiert werden. Wurde die Strecke zwischen P1 und P3 um 20 m länger, so müssen zur Position jedes Deko-Elements hinter P3 20 m aufaddiert werden.

6.2.1 Sukzessives Vorgehen

Gegeben sind zwei Rails. Das erste beginnt in P1 und endet in P6, das zweite läuft von P6 nach P11. Zwischen den einzelnen Punkten befindet sich je ein Geometrie-Element. Der Punkt P6 wird vom Anwender auf P6` verschoben. Das Problem zerfällt  nun in zwei Teile: Ist der Punkt P6 ein Anfangs- oder Endpunkt einer Trasse, so muss nur ein Teilstück modifiziert werden. Es wird versucht, eine Einrechnung für das angrenzende Geometrie-Element zu generieren, also eine Strecke zwischen P5 und P6` einzurechnen. Ist das nicht möglich, so versucht man eine Einrechnung statt der letzten zwei angrenzenden Geometrie-Elemente zu generieren, also von P4 nach P6`. Schlägt auch hier die Einrechnung der Trasse fehl, so legt man den Startpunkt wieder ein Geometrie-Element weiter zurück und versucht eine Einrechnung. Dies wiederholt man so lange, bis eine Einrechnung möglich wird oder der Anfang des Rails erreicht ist. Ebenso verfährt man mit der anderen Seite. Erst wird versucht, eine Trasse von P6` nach P7 zu legen. Klappt das nicht, so versucht man es von P6` nach P8 usw., bis man eine Einrechnung gefunden hat oder das Ende Rails erreicht ist. Hat man bis dahin keine Einrechnung gefunden, so muss auch hier die Einrechnung abgebrochen werden.

6.2.2 Abbruchkriterien

Erreicht man durch sukzessives Vorgehen den End- oder Startpunkt eines Rails und ist bis dahin keine Einrechnung möglich, so wird der Algorithmus beendet. Es besteht zwar die Möglichkeit, am angrenzenden Rail den Algorithmus weiter anzuwenden, jedoch kann sich am Ende eines Rails auch eine Weiche befinden. Das Gleis teilt sich dann und es müssen beide Trassen verfolgt werden. Problematischer ist jedoch die Tatsache, dass es verschiedene Weichentypen gibt und diese noch einmal durch die Krümmung unterschieden werden. Modifiziert man also über das Ende eines Rails hinaus, so muss u.U. auch eine Weiche neu berechnet werden. Dies ist automatisch nicht bzw. nur unzureichend möglich.
Bricht der Algorithmus ab, weil keine Einrechnung möglich ist, so wird eine Exception geworfen. Das geworfene Objekt enthält neben der bereits richtig eingerechneten Trasse einen String mit dem Grund für den Abbruch der Streckeneinrechnung. Mit Hilfe des Strings kann der Anwender auf die Probleme bei der Einrechnung hingewiesen werden. Er kann dann die Vorgaben abändern, damit eine Einrechnung möglich wird.


[previous][map][next]