Ich zeige, wie durch Wahl eines geeigneten Koordinatensystems die Berechnung des Schnittpunktes zweier Geraden vereinfacht wird. Ich leite die Formeln her und erstelle ein JavaScript, welches den Schnittpunkt zweier Geraden berechnet. Eine interaktive Animation zeigt das JavaScript in Aktion.
Gegeben seien zwei Geraden g1 und g2 in Vektorform. Das heisst die Gerade g1 geht durch den Punkt
Gesucht ist der Schnittpunkt
Durch Wahl eines geeigneten Koordinatensystems K' lässt sich die Aufgabe vereinfachen:
Ich wähle die Gerade g1 als X-Achse des Koordinatensystems K' und den Punkt
Für die beiden Geraden gelten die folgenden Geraden-Gleichungen:
(1) |
| ||||||||||||||||||||||||
(2) |
| ||||||||||||||||||||||||
wobei' |
|
Die Gerade g1 bildet die X-Achse des Koordinatensystems K' mit dem Ursprung beim Punkt
Den Punkt
(3) |
| ||||||||||||
mit | |||||||||||||
wobei' |
|
Die Richtung
(4) |
| ||||||
mit | |||||||
wobei' |
|
Damit erhalte ich zwei neue Geradengleichungen im System K':
(5) |
Linie g1 | |
(6) |
Linie g2 |
Für den Schnittpunkt
(7) |
Linie g1 | |
(8) |
Linie g2 |
Die Werte a und b erhalte ich, wenn ich die beiden obigen Gleichungen einander gleichsetze:
(9) |
Die obige Gleichung in die beiden Komponenten zerlegt:
(10) | |
Vereinfacht:
(11) | |
(12) |
Daraus lassen sich direkt die beiden Variablen a und b berechnen:
(13) | |
(14) |
Um den Schnittpunkt
(15) |
Dem JavaScript müssen die beiden Punkte
Wenn sich die Geraden nicht schneiden oder identisch sind, wird null zurückgegeben.
function IntersectLines( P, r, Q, s ) { // line1 = P + lambda1 * r // line2 = Q + lambda2 * s // r and s must be normalized (length = 1) // returns intersection point O of line1 with line2 = [ Ox, Oy ] // returns null if lines do not intersect or are identical var PQx = Q[0] - P[0]; var PQy = Q[1] - P[1]; var rx = r[0]; var ry = r[1]; var rxt = -ry; var ryt = rx; var qx = PQx * rx + PQy * ry; var qy = PQx * rxt + PQy * ryt; var sx = s[0] * rx + s[1] * ry; var sy = s[0] * rxt + s[1] * ryt; // if lines are identical or do not cross... if (sy == 0) return null; var a = qx - qy * sx / sy; return [ P[0] + a * rx, P[1] + a * ry ]; }
Der rote Kreis ist der vom JavaScript berechnete Schnittpunkt.
Toll