[previous][map][next]

2.3 Geometrische Funktionen

Zur Berechnung von Trassen sind diverse geometrische Funktionen nötig. Sie werden im folgenden hergeleitet:

2.3.1 Gerade durch zwei Punkte

Gegeben:
 
P1 (x1, y1) Koordinaten des 1. Punktes auf der Geraden
P2 (x2, y2) Koordinaten des 2. Punktes auf der Geraden
Gesucht:
 
P(x, y) Koordinaten eines Punktes der Geraden
a Richtungswinkel der Geraden
Eine Gerade ist durch zwei nicht identische Punkte P1 und P2 eindeutig bestimmt. Da jedoch Geraden in meinem Programm in einer Punkt-Winkel-Form verwaltet werden, ist die Berechnung des Richtungswinkels der Gerade nötig.
Dazu wird im ersten Schritt die Steigung berechnet. Diese ergibt sich aus dem Quotienten der Koordinatendifferenzen. Steigung s = (y2- y1) / (x2 - x1).
Mittels des Tangens der Steigung tan(s) läßt sich nun der Winkel a berechnen. Es gilt jedoch folgende Einschränkungen zu beachten: Für die Koordinaten des Punktes P werden die Koordinaten von P1 verwendet, was ebenfalls zu einer Vereinfachung der Implementierung diverser komplexerer Algorithmen beiträgt.
 

2.3.2 Schnittpunkt zweier Geraden

Gegeben:
Gerade 1:
 
P1(x1, y1) Koordinaten eines Punktes auf der Gerade 1
a1 Richtungswinkel der Gerade 1

Gerade 2:
 
P2(x2, y2) Koordinaten eines Punktes auf der Gerade 2
a2 Richtungswinkel der Gerade 2

Gesucht:
 
P(x, y) Koordinaten des Schnittpunktes
Zwei Geraden schneiden sich in einem Punkt, wenn sie nicht parallel sind. Sind die Geraden parallel, muss eine Ausnahmebehandlung durchgeführt werden. Den Schnittpunkt der Geraden erhält man folgendermaßen:
Man berechnet mittels der Tangensfunktion die Steigungen s1 und s2 der Geraden.
s1 = tan(a1)
s2 = tan(a2)
Auch hier ist eine Sonderbehandlung für a = 90° bzw. 270° nötig, da für diese Werte die Tangensfunktion nicht definiert ist.
Im nächsten Schritt werden die y-Achsenabschnitte der Geraden berechnet.
a1 = y1 - s1 * x1
a2 = y2 - s2 * x2
Die Koordinaten des Schnittpunktes ergeben sich wie folgt:
x = (a2 - a1) / (s1 - s2)
y = (s1 * a2 - s2 * a1) / (s1 - s2)
Sollte eine der Geraden parallel zur y-Achse sein, so kann der y-Achsenabschnitt nicht berechnet werden, es muss daher anders verfahren werden. Der x-Wert des Schnittpunktes entspricht dem x-Wert der zur y-Achse parallelen Gerade, der y-Wert ergibt sich durch Einsetzen des x-Wertes in die Geradengleichung der anderen Gerade.

2.3.3 Normale zu einer Geraden in einem Punkt

Gegeben:
 
P1(x1, y1) Koordinaten eines Punktes auf der Gerade g
a1 Richtungswinkel der Gerade g
Gesucht:
 
P(x, y) Koordinaten eines Punktes auf der Normalen n
a2 Richtungswinkel der Normalen n
Die Berechnung einer Normalen ist ohne großen Aufwand möglich. Für den Punkt P können die Koordinaten des Punktes P1 verwendet werden. Der Winkel a2 ergibt sich durch Addition von p/2 zum Richtungswinkel a1
P = P1
a2 = a1 + p/2
Auch hier wurde zur Vereinfachung späterer Algorithmen der Richtungswinkel der Normalen durch a2 = a1 + p/2 festgelegt, also eine Drehung gegen den Uhrzeigersinn. Mathematisch richtig ist auch a2 = a1 - p/2.

2.3.4 Mittelpunkt eines Kreises durch Randpunkt

Gegeben:
 
P(x1, y1) Koordinaten eines Punktes auf dem Kreis
a1 Tangentenwinkel im Punkt P
r1 Radius im Punkt P
Gesucht:
 
M(x, y) Koordinaten des Kreismittelpunktes
Gegeben ist ein Punkt auf dem Gleis. Es ist die Richtung des Gleises in diesem Punkt bekannt. Weiterhin kennt man die Krümmung, also den Radius an dieser Stelle des Gleises. Gesucht ist das Zentrum zu dem zugehörigen Radius. Im ersten Schritt muss für Rechtskurven zum Richtungswinkel p addiert werden, damit später die Normale die richtige Orientierung hat. In Schritt drei und vier steht N.a für den Richtungswinkel der Normalen.

2.3.5 Mittelsenkrechte zweier Punkte

Gegeben:
 
P1(x1, y1) Koordinaten eines Punktes P1
P2(x2, y2) Koordinaten eines Punktes P2
Gesucht:
 
M(x, y) Koordinaten des Mittelpunktes zwischen P1 und P2
a Richtungswinkel der Mittelsenkrechten
Für diverse Programmteile ist die Berechnung der Mittelsenkrechte zwischen zwei Punkten nötig. Diese berechnet sich auf folgende Weise: Für den Fall, dass P1 gleich P2 ist, kann keine Berechnung durchgeführt werden.

2.3.6 Winkelhalbierende zweier Geraden

Ebenso wie die Mittelsenkrechten benötigt man winkelhalbierende Geraden zur Einrechnung von Trassen.

Gegeben:
 
P1(x1, y1) Koordinaten eines Punktes auf der Gerade g1
a1 Richtungswinkel der Gerade g1
P2(x2, y2) Koordinaten eines Punktes auf der Gerade g2
a2 Richtungswinkel der Gerade g2
Gesucht:
 
M(x, y) Koordinaten eines Punktes auf der Normalen n
a Richtungswinkel der Normalen n
Die Koordinaten des Punktes M erhält man, indem man die Geraden g1 und g2 schneidet.
Der Winkel a ergibt sich aus den Winkeln a1 und a2. Es muss dabei unterschieden werden, ob man sich gegen oder mit dem Uhrzeigersinn von der Geraden g1 auf die Gerade g2 zubewegt. Gegen den Uhrzeigersinn (in b - Richtung) erhält man die blaue Winkelhalbierende mit dem Richtungswinkel a4, im Uhrzeigersinn (in j - Richtung) die lila Winkelhalbierende mit dem Richtungswinkel a3.


[previous][map][next]