Hagis schrieb:
> Die Geraden AB und AP haben eine gewisse Steigung m bzw. n. t sei die
> Differenz der Beträge der beiden Steigungen.
nicht!
In der Geometrie ist die Geradengleichung
praktisch nicht zu gebrauchen!
Den Schnittpunkt 2-er Geraden rechnet mit mit diesem Ansatz
gegeben 2 Gerade A und B mit den Endpunkten
PA1, PA2
bzw. PB1, PB2
Für jeden Punkt PA auf der Geraden A gibt es ein tA, sodass gilt1 | PA = PA1 + tA * dA ( wobei dA = PA2 - PA1 )
|
Genauso gilt für jeden Punkt PB auf der Geraden B ein tB, sodass
1 | PB = PB1 + tB * dB ( wobei dB = PB2 - PB1 )
|
Gibt es einen Schnittpunkt der beiden Geraden, nennen wir ihn PS,
dann muss dieser Punkt logischerweise auf Gerade A liegen
1 | PS = PA1 + tAs * dA (I)
|
und er muss auch auf Geraden B liegen
1 | PS = PB1 + tBs * dB (II)
|
Da es sich aber in beiden Fällen um denselben Punkt handelt, muss
klarerweise gelten
1 | PA1 + tAs * dA = PB1 + tBs * dB
|
Dies ist eine Vektorgleichung, da ja jeder Punkt dir x und y beschrieben
ist. Also haben wir da in Wirklichkeit 2 Gleichungen
1 | PA1x + tAs * ( PA2x - PA1x ) = PB1x + tBs * ( PB2x - PB1x )
|
2 | PA1y + tAs * ( PA2y - PA1y ) = PB1y + tBs * ( PB2y - PB1y )
|
Das sind 2 Gleichungen in 2 Unbekannten (tAs und tBs) und das lässt sich
lösen. Heraus kommt eine Lösungsformel, die den ganzen Zirkus den du bei
Anwenden der linearen Gleichung y = k*x+d nicht hast. Bei dir ist
nämlich das Problem, dass die Steigung k bei Geraden, die nahezu
senkrecht stehen über alle Grenzen wächst und im Grenzwert 90° unendlich
wird. All das hast du mit dem t-Ansatz nicht. Die Lösungsformel ergibt
einen Bruch. Und wie immer bei Brüchen muss man darauf achten, dass
nicht durch 0 dividiert wird. In diesem Fall hat aber eine versuchte
DIvision durch 0 auch eine geometrische Sonderrolle: In diesem Fall sind
die Geraden parallel und es existiert kein Schnittpunkt. Aber abgesehen
von diesem Parallel-Sonderfall gibt es keinen anderen Sonderfall, der
einem das Leben schwer machen könnte. Die Geraden können liegen wie sie
wollen.
Und im übrigen muss man gar keinen Schnittpunkt berechnen.
Es genügt völlig, wenn man berechnet, auf welcher Seite der Geraden ein
bestimmter Punkt liegt. Das Überschreiten der Geraden wird dann dadurch
angezeigt, dass der nächste Testpunkt, auf der anderen Seite der Geraden
liegt.
Wie bestimmt man, auf welcher Seite einer Geraden ein Punkt liegt?
Ganz einfach: (keine Sorge, die Mathe dahinter fägnt jetzt erst mal
kompliziert an, aber sie vereinfacht sich zum Schluss hin extrem, bis
eine ganz einfache Formel übrig bleibt)
Man geht vom 2D ins 3D.
Gegeben sind dann 2 Vektoren in einer Ebene. Der eine wird gebildet von
der Geraden, gegeben durch 2 Punkte PA1 und PA2. Der andere wird
gebildet von dem Testpunkt P und einem der beiden Endpunkte der Linie,
nehmen wir einfach mal PA1.
1 | V1: ( PA2x - PA1x ; PA2y - PA1y ; 0.0 )
|
2 | V2: ( Px - PA1x ; Py - PA1y ; 0.0 )
|
(Zur Erinnerung: Wir sind vom 2D ins 3D gegangen und die beiden Vektoren
liegen in der x/y Ebene. Daher sind die z-Komponenten der Vektoren
jeweils 0.
Nun kann man im 3D mit 2 Vektoren ein Koordinatensystem aufspannen. Die
z-Komponente des Koordinatensystems erhält man, indem man das
Kreuzprodukt der beiden Vektoren bildet. Und auf diese z-Komponente sind
wir aus: Sie muss logischerweise senkrecht auf die x/y stehen. Aber: je
nachdem wie die beiden Vektoren zueinander orientiert sind, zeigt der
z-Vektor (von aussen betrachtet) einmal in die x/y Eben hinein und
einmal heraus. Und genau das ist unser Kriterium, auf welcher Seite der
Geraden sich der Punkt befindet.
Wir rechnen also
1 | V1x V2x
|
2 | V1y kreuz V2y
|
3 | 0.0 0.0
|
und das ergibt
1 | V1y * 0.0 - 0.0 * V2y = Rx
|
2 | 0.0 * V2x - V1x * 0.0 = Ry
|
3 | V1x * V2y - V1y * V2x = Rz
|
die x bzw. y Komponente des Z-Vektors müssen 0 sein (weil ja der
Z-Vektor senkrecht auf die x/y Ebene steht) und genau das ist im
Ergebnis auch der Fall. Sowohl Rx als auch Ry sind jeweils 0.
Für uns ist nur das Vorzeichen von Rz interessant. Ist es positiv so
befindet sich der Testpunkt auf der einen Seite der Geraden, ist es
negativ, so ist der Testpunkt auf der anderen Seite. Ist Rz 0, dann
liegt der Testpunkt exakt auf der Geraden PA2 - PA1
Um also zu bestimmen, auf welcher Seite der Geraden PA1 PA2 ein
Testpunkt P liegt, berechnen wir
wobei V1x = PA2x - PA1x ; V1y = PA2y - PA1y
V2x = Px - PA1x ; Py - PA1y
in Summe also
1 | ( PA2x - PA1x ) * ( Py - PA1y ) - ( PA2y - PA1y ) * ( Px - PA1x )
|
Das Vorzeichen dieses Ausdrucks sagt uns, auf welcher Seite der Geraden
sich der Punkt befindet.
Nun kann man das alles natürlich auch auf Grosskreise übertragen und
sich fragen auf welcher Seite einer Ebene sich ein Punkt befindet, wobei
die Punkte durch die beiden Endpunkte der Geraden und dem Erdmittelpunkt
gebildet werden. Allerdings ist die Kugel gross genug, dass man den
Fehler, der durch Projektion auf eine Tangetialebene in der Mitte der
Geraden gemacht wird, vernachlässigen kann.
-> die GPS Koordinaten in 2D Koordinaten umwandeln. Obige Gleichung
anwenden und feststellen ob bei 2 aufeinanderfolgenden Punkten sich das
Vorzeichen des Testausdrucks geändert hat.