Seite 2 von 2

Re: Schnittpunkt zweier Geraden

Verfasst: Mi Mai 29, 2013 9:17 am
von Xin
nati hat geschrieben:Die Geraden sind in einem 2D Raum.
Dachte die Variblen p1 und p2 im Code von Dirty Oerti sind die Koordinaten des Schnittpunktes, hat aber mit meinem Beispiel nicht geklappt..
Geraden im 2D Raum lassen sich durch

Code: Alles auswählen

f(x) = mx + a;
ausdrücken, wobei f(x) der y-Wert an der Position x ist.

Wenn Du zwei Geraden (f und g) hast, ist die Frage, bei welchem x sie sich treffen. Sich treffen bedeutet ja, dass am gleichen x-Wert der gleiche y-Wert ist:

Code: Alles auswählen

f(x) = mx + a;
g(x) = nx + b;

Schnittpunkt: 
f(x) = g(x)
mx+a = nx+b
mx = nx + (b - a)
mx - nx = b-a
(m-n)*x = b-a
x = (b-a) / (m-n)
Nachdem Du nach x aufgelöst hast, kannst Du die x-Position bestimmen. Dieses x wirfst Du in f(x) oder g(x) wieder rein - da sie sich da ja treffen ist der resultierende y-Wert ja identisch - und hast die Schnittpunkt (x,y)

Re: Schnittpunkt zweier Geraden

Verfasst: Mi Mai 29, 2013 10:28 am
von nati
OK, das mit dem linaren Funktionen kenn ich noch, aber was ist wenn ich 2 Geradengleichungen habe(Ausgangspunkt und Richtungsvektor). Wie kann ich da den Schnittpunkt(Koordinaten) berechnen?

Geht das dann gleich?!

Sorry hab mich etwas schwammig ausgedrückt..

Re: Schnittpunkt zweier Geraden

Verfasst: Mi Mai 29, 2013 10:46 am
von cloidnerux
Hi.
Mit den Vektoren funktioniert das nach Dirty Oertis Lösung.
Du hast ja zwei geraden:

Code: Alles auswählen

g1: a + r*v
g2: b + s*u
Wobei a und b die Aufpunkte(Ortsvektoren) sind, r und s beliebige, rationale Parameter und v und u die Richtungsvektoren. Der Schnittpunkt ist der, wo die beiden Geradengleichungen gleich sind:

Code: Alles auswählen

g1 = g2
Daher entsteht das LGS:

Code: Alles auswählen

a.x+r*v.x = b.x+s*u.x
a.y+r*v.y = b.y+s*u.y
Dieses LGS musst du lösen. Der Schnittpunkt ist dann dementsprechend der Punkt der Geraden für das berechnete r oder s.
Wichtig ist, dass du während der Berechnung deine Parameter für a, b, v oder u nicht veränderst.

Zudem musst du prüfen, ob weder v oder u gleich dem Nullvektor sind und ob v und u nicht kollinear sin, wobei das durch das Lösen des LGS auch herauskommen würde(keine Lösung/unendlich viele Lösungen für gleiche Geraden)

Re: Schnittpunkt zweier Geraden

Verfasst: Mi Mai 29, 2013 3:07 pm
von nati
Ok die Berechnung der Schnittpunkte funktioniert.. aber was ist wenn ich zwischen den Fällen, die Geraden sind identisch und parallel unterscheiden möchte?

Re: Schnittpunkt zweier Geraden

Verfasst: Mi Mai 29, 2013 4:00 pm
von cloidnerux
Dann musst du die Beiden Vektoren erstmal auf kolinearität prüfen, also ob:

Code: Alles auswählen

v = t*u
Du kannst also mit:

Code: Alles auswählen

t = v.x/u.x
if(u.y * t != v.y) nicht kollinear
auf kollinearität prüfen.
Identisch sind sie, wenn das LGS unendlich viele Lösungen hat. Also wenn r oder s 0 ist.
Wenn ich es recht in Erinnerung habe, sollte bei r = s = 0 keine Lösung, also Parallelität vorliegen.