Schnittpunkt dreier Ebenen

Neue Frage »

ErnstP Auf diesen Beitrag antworten »
Schnittpunkt dreier Ebenen
Hallo,

ich habe 3 Ebenen, welche jeweils durch 3 Koordinaten im dreidimensionalen Raum definiert sind. Nun möchte ich den Punkt (also die koordinaten x, y, z) berechnen, an dem sich alle drei Ebenen schneiden - also der Schnittpunkt von 3 Ebenen :-)

Ich würde mich freuen wenn mir da jemand helfen könnte..


Vielen Dank!
Leopold Auf diesen Beitrag antworten »

Das ist denkbar einfach.
Löse das lineare Gleichungssystem, das die drei Ebenengleichungen bilden.

Beispiel:



Das (-3)-fache der ersten Gleichung wird zur zweiten und das (-2)-fache der ersten zur dritten addiert:



Jetzt werden die zweite und dritte Gleichung vertauscht. Dann wird das (-11)-fache der neuen zweiten zur neuen dritten Gleichung addiert:



Jetzt löst man das Gleichungssystem von unten nach oben und erhält



S(1|2|1) ist daher der Schnittpunkt der drei Ebenen.
ErnstP Auf diesen Beitrag antworten »

Ah danke Leopold, das ist ja wirklich einfach :-)

Nun muss ich sehen (ist jetzt Offtopic) wie ich es auch in der Informatik, sprich per Programmcode, lösen kann. Mal sehen ob ich das hinbekomme.


Danke nochmal Leopold
Mazze Auf diesen Beitrag antworten »

Wenn du es automatisiert lösen willst, nutze den gauß algorithmus, der is im prinziep das was Leopold gemacht hat nur systematisiert^^.

folgendes gleichungs system





Jetzt machst du alles Per Schema f. Als erstes stellst du die nullen in Spalte eins her





<=>





Jetzt wendest du das nur noch auf die zweite spalte an. Die erste Spalte ist somit fertig. Das sieht jetzt alles hart formal aus aber du machst prinzipiell immer das gleiche. Wennstes nicht ganz verstanden hast such dir mal online Paar Dokus zum Gaußverfahren weil das is gut geeignet für maschinelle Auswertung von Gleichungssystemen.
ErnstP Auf diesen Beitrag antworten »

Ah danke Mazze, nach soetwas habe ich gesucht.

Ich werde mir Dein Beispiel heute Abend einmal genau anschauen, ich kannte das Gauß Verfahren bisher nicht. Hat dieses Verfahren einen speziellen Namen, damit ich leichter danach z.B. in Google suchen kann um mehr darüber zu lernen?

Danke!
Mazze Auf diesen Beitrag antworten »

allgemein Bekannt als "Gaußverfahren" , "Gaußalgorithmus" oder "Gaußscher Algorithmus"
 
 
ErnstP Auf diesen Beitrag antworten »

Ist es das "Gaußsche Eliminationsverfahren", z.B. zu finden unter

?http://miss.wu-wien.ac.at/~leydold/MOK/HTML/node9.html#sec.2:GaussElim

und

http://de.wikipedia.org/wiki/Gau%DFsches_Eliminationsverfahren

?
Mazze Auf diesen Beitrag antworten »

Ja ist es, gibt halt mehr als nur eine Bezeichnung dafür.
Leopold Auf diesen Beitrag antworten »

@ ErnstP

Wenn es dir beim Programmieren nur um das dreidimensionale Problem "Schnitt dreier Ebenen" geht, könntest du auch die Cramersche Regel zur Berechnung des Ebenenschnittpunktes verwenden. Vielleicht googlest du einmal unter diesem Stichwort.
ErnstP Auf diesen Beitrag antworten »

Also ich bin nun dabei, dass Gleichungssystem mit dem Gauß Algorithmus zu lösen, und bin dabei auf ein Problem gestoßen:

Man hat ja beim "Hinweg" das Problem, dass man mit einer Zahl multiplizieren muss und mit dem Ergebnis dann eine weitere aus der unteren Reihe addieren muss. Diesen Faktor gilt es also zu finden, damit man die Nullen generieren kann.

Beispiel:
1
3

Man muss die 1 mit -3 multiplizieren, und das Ergebnis dann zu 3 addieren - somit wird die untere 3 zur Null.


Jetzt dachte ich, diesen Faktor herauszubekommen ist einfach, in dem man die Größere der beiden (aus dem obigen Beispiel die 3) durch die kleinere der beiden (die 1) teilt, und dieses Ergebnis negiert - in dem obigen Beispiel funktioniert das, denn man bekäme -3 heruas, das mit 3 addiert ergäbe dann die gewünschte Null.

Sind diese Zahlen da oben jedoch negativ, oder eine negativ und die andere Positiv, so ergeben sich spezielfälle, in denen das oben beschriebene Verfahren überhaupt nicht mehr geht (z.B. bei den beiden Zahlen -3 und 1 funktioniert es nicht, denn die Größere ist ja die 1, aber 1 durch -3 ergibt -0.333...)


Deshalb die Frage, wie bekomme ich am besten diese Zahl heraus, mit der ich die 2- Zahl addieren muss, damit sie Null wird?


Vielen Dank für Eure Hilfe!
Mazze Auf diesen Beitrag antworten »

Es ergeben sich keine Spezialfälle, das allgemeine Schema (f) Funktioniert tadellos.




Um jetzt eine Zeilenstufenform zu bekommen musst du von der zweiten Zeile das fache abziehen. Dabei ist egal wie das Vorzeichen aussieht da es sich immer wunderbar auflößt.

Das kann man veralgemeinert immer so machen!


ErnstP Auf diesen Beitrag antworten »

Ok, ich habe das nun so gemacht. Ich habe ein Beispiel genommen, bei dem auch das richtige rauskommt, und dann habe ich mal testweise das Beispiel von Leopold's erster Antwort genommen, aber ich bekomme etwas anderes heraus.

Ich weiß, das gehört jetzt so nicht hierhin da es quelltext der programmierung ist, aber das dürfte leicht für jeden lesbar sein, da es quasi nur Mathe ist:

/*
Gleichungen:
a1*x + a2*y + a3*z = e1
b1*x + b2*y + b3*z = e2
c1*x + c2*y + c3*z = e3
*/

//b1 = b1 - (b1/a1 * a1); // wird null
b2 = b2 - (b1/a1 * a2);
b3 = b3 - (b1/a1 * a3);
e2 = e2 - (b1/a1 * e1);
b1 = 0;

//c1 = c1 - (c1/a1 * a1); // wird null
c2 = c2 - (c1/a1 * a2);
c3 = c3 - (c1/a1 * a3);
e3 = e3 - (c1/a1 * e1);
c1 = 0;

//c2 = c2 - (c2/b2 * b2); // wird null
c3 = c3 - (c2/b2 * b3);
e3 = e3 - (c2/b2 * e2);
c2 = 0;

// Am Ende die Koordinaten ermitteln:
z = e3 / c3;
y = -(b3 * z) / b2;
x = (e1 - (a2*y) - (a3 * z)) / a1;


Wenn ich z.B. folgende Werte nehme, kommt das richtige Ergebnis (x = 5 y = -6 z = 3) raus:

1 2 3 | 2
1 1 1 | 2
3 3 1 | 0

Nehme ich jedoch die Werte von Leopold, also

1 -2 3 | 0
3 4 -2 | 9
2 -1 5 | 5

so kommt bei mir x=-0.8, y=1.1, z=1 heraus, bei Leopold oben kam aber 1, 2, 1 heraus. Ich kann mir einfach nicht erklären warum das so ist. Ich würde mich sehr freuen, wenn jemand den Fehler in der Berechnung sieht.


Nochmals Danke!
Leopold Auf diesen Beitrag antworten »

Ein bißchen aufpassen muß man schon. Was ist, wenn bei der Division der Divisor Null wird? Tip: Erst durch Vertauschen von Zeilen dafür sorgen, daß a1 ungleich 0 wird.

Zitat:
Original von ErnstP

//b1 = b1 - (b1/a1 * a1); // wird null
b2 = b2 - (b1/a1 * a2);
b3 = b3 - (b1/a1 * a3);
e2 = e2 - (b1/a1 * e1);
b1 = 0;



Ich denke, der Fehler liegt schon in der zweiten Zeile, denn b1 wurde in der ersten Zeile auf 0 gesetzt. (Der Faktor b1 muß also in einer Extra-Variablen abgespeichert werden.)
ErnstP Auf diesen Beitrag antworten »

Zitat:
Ich denke, der Fehler liegt schon in der zweiten Zeile, denn b1 wurde in der ersten Zeile auf 0 gesetzt. (Der Faktor b1 muß also in einer Extra-Variablen abgespeichert werden.)


Aber die erste Zeile ist ja auskommentiert "//", dadurch wird sie ignoriert, sorry dass ich sie noch mit reingeschrieben hatte.
Ich setze b1 ja erst auf 0, wenn die Ergebnisse von b2, b3 und e2 feststehen. Das kann also nicht der Fehler sein...
Leopold Auf diesen Beitrag antworten »

Sorry, ich hatte "//" nicht beachtet.
Aber dein y ganz zum Schluß: Fehlt da rechts nicht e2?
ErnstP Auf diesen Beitrag antworten »

Tatsache! Du hast recht, ich habe dieses e2 dort vergessen.
Nun funktioniert es (wies aussieht), beide Gleichungssysteme werden korrekt gelöst smile

Vielen Dank für Deine/Eure Hilfe
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »