Schnittpunkt zweier Geraden

Fragen zu mathematischen Problemen
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8486
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Schnittpunkt zweier Geraden

Beitrag von Xin » Mi Mai 29, 2013 9:17 am

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)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nati
Beiträge: 24
Registriert: Sa Jun 06, 2009 1:35 pm
Wohnort: Österreich/Kärnten

Re: Schnittpunkt zweier Geraden

Beitrag von nati » Mi Mai 29, 2013 10:28 am

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..

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3083
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Schnittpunkt zweier Geraden

Beitrag von cloidnerux » Mi Mai 29, 2013 10:46 am

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)
Redundanz macht wiederholen unnötig.
quod erat expectandum

nati
Beiträge: 24
Registriert: Sa Jun 06, 2009 1:35 pm
Wohnort: Österreich/Kärnten

Re: Schnittpunkt zweier Geraden

Beitrag von nati » Mi Mai 29, 2013 3:07 pm

Ok die Berechnung der Schnittpunkte funktioniert.. aber was ist wenn ich zwischen den Fällen, die Geraden sind identisch und parallel unterscheiden möchte?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3083
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Schnittpunkt zweier Geraden

Beitrag von cloidnerux » Mi Mai 29, 2013 4:00 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten