Nur eine Richtung einer Ebene untersuchen (Basiswechsel?)

Neue Frage »

conito Auf diesen Beitrag antworten »
Nur eine Richtung einer Ebene untersuchen (Basiswechsel?)
Moin zusammen,

ich habe Punktwolken (in Messungen aufgenommene Koordinaten), die ungefähr ideal (aber eben nicht ideal) als Ebene (Fläche) im Raum liegen. Die Flächen liegen zu keiner der Ursprungsebenen parallel.

Ich möchte nun die "Welligkeit" dieser Ebenen untersuchen und ändern. Ich muss die Ebene also so abbilden, dass nur eine Richtung (z.B. die z-Richtung) relevant wird. Aktuell ist es ja so, dass X und Y ebenfalls Auswirkungen auf die Z-Richtung haben, da die Fläche irgendwie im Raum liegt. Ich hoffe, das ist einigermaßen verständlich.

Meine erste Idee war Folgende:
1. Bilde eine Regressionsebene (liegt in y=a+b1*x+b2*y vor)
2. Nehme den Normalvektor
3. Drehe um X und drehe um Y, so dass der Normalvektor in Z-Richtung zeigt.
(4.) Hat nicht funktioniert (die Winkel scheinen nicht zu stimmen)

Zweite Idee: Basiswechsel

Hier bin ich allerdings auf Hilfe angewiesen, da mir ein bisschen der Ansatz fehlt. Ich habe jetzt einige gelesen und ausprobiert, aber das scheint alles noch nicht das Gelbe vom Ei.

Ich habe die Möglichkeit, die "transformierte" Punktwolke zu mittels 3D-Software zu überprüfen, aber Z will einfach nicht orthognal auf der Ebene stehen.

Über ein paar Ideen, Ansätze, "Fahrpläne" wäre ich sehr dankbar.

Vielen Dank!
conito
klauss Auf diesen Beitrag antworten »
RE: Nur eine Richtung einer Ebene untersuchen (Basiswechsel?)
Ich verstehe das also so, dass Du die Regressionsebene (und damit die Punktwolken) so drehen willst, dass z. B. der Standardbasisvektor e3 der z-Achse ein Normalenvektor der Ebene ist.

Dazu würde ich an folgende Strategie denken:

Gehen wir davon aus, dass die Regressionsebene durch den Ursprung des geht. Sollte dies tatsächlich nicht der Fall sein, würde die Beschreibung einer Verschiebung im Raum keine allzu problematischen Zusatzüberlegungen erfordern. Hier geht es ja in erster Linie um das Problem der Drehung.

1. Aus der Gleichung der Regressionsebene läßt sich für diese eine Orthonormalbasis bestimmen. Zusammen mit dem bisherigen (normierten) Normalenvektor der Regressionsebene bilden diese eine Orthonormalbasis b1, b2, b3 des .

2. Die Reihenfolge b1, b2, b3 wird nun so gewählt, dass diese ein Rechtssystem bilden. Das kann man mit Hilfe des Kreuzprodukts überprüfen.

3. Dann läßt sich eine lineare Abbildung bestimmen, mit der b1, b2, b3 auf die Standardbasis des abgebildet wird. Mit f(b1)=e1, f(b2)=e2, f(b3)=e3 wird also ONB auf ONB abgebildet, d. h. die Abbildung ist durch eine orthogonale Matrix darstellbar.

Danach sollte die Regressionsebene in der x-y-Ebene liegen und demzufolge die z-Achse wie gewünscht den Normalenvektor liefern.
Drehwinkel oder -achse muß man dafür vorab nicht kennen, die könnte man ggf. später gesondert bestimmen.

Ich habe hierzu bisher keine Proberechnung angestellt, aber wenn Du mal eine konkrete Gleichung für die Regressionsebene angibst, mach ich mich gern an die Bestimmung der Abbildungsmatrix.

Aus Zeitgründen könnte ich das Ergebnis allerdings erst Tage später einstellen, da ich nicht jeden Tag online bin. Aber dann kann jederzeit gern ein anderer Helfer hier einspringen.
URL Auf diesen Beitrag antworten »
RE: Nur eine Richtung einer Ebene untersuchen (Basiswechsel?)
Warum projizierst du nicht einfach auf den Normalenvektor der Regressionsebene? Bei einer Ebene hätte diese Projektion immer den gleichen Wert. Unterschiedliche Werte beschreiben also die Welligkeit.
conito Auf diesen Beitrag antworten »

Hallo klauss,

sorry für meine verspätete Antwort. Ich war über das lange Wochenende leider auch mit anderen Dingen beschäftigt.

Ja, die Idee ist gut und für mich machbar. Zu Punkt 1: Wie würdest du die Orthonomalbasis bestimmen? Ich habe probiert, zwei weitere Vektoren zu finden. Ich nenne sie einmal u und v. u habe ich bestimmt, indem ich gesagt habe:

, damit ist das Skalarprodukt dererbeiden 0 und sie stehen senkrecht aufeinander, richtig?

Das Kreuzprodukt aus und ergibt dann einen weiteren Vektor, der orthogonal zu beiden stehen sollte.

Kann ich das so machen? Habe noch das Gram-Schmidt-Verfahren gefunden, aber irgendwie eignet sich das nicht so gut, da ich eine zwei gegebenen Startvektoren habe.

Zu Punkt 2: Wie ist die Reihenfolge zu verstehen und warum ist die relevant?

Zu Punkt 3: Wie lauten diese Gleichungen? Redest du einfach über die Multiplikation meiner eigentlichen Koordinaten mit der Abbilungsmatrix?

Beispiel für eine meiner Ebenengleichungen für die Regressionsebene:



Wenn du dir die Mühe machen magst, um dafür die Abbildungsmatrix aufzustellen, wäre ich dir sehr dankbar für den Rechenweg, weil ich das für weitere tausende Ebenen machen möchte... (muss) Augenzwinkern

Vielen Dank, viele Grüße!
klauss Auf diesen Beitrag antworten »

War zu erwarten, dass mit nicht so schönen Zahlen gerechnet werden muß und die Ebene nicht durch den Ursprung geht.

Zunächst betrachte ich also die unverschobene Ebene, deren Gleichung dann lautet

mit dem Normalenvektor

Aus

ergibt sich dann die Parameterform der Ebene

Die Ebene wird also durch die beiden letzteren Vektoren aufgespannt, die eine Basis der Ebene darstellen. Sie sind allerdings noch nicht orthogonal.
Um eine Orthogonalbasis der Ebene zu bestimmen, könnte man Gram-Schmidt anwenden, aber bequemer ist hier das Kreuzprodukt.
Ich berechne

Dann bilden

eine Orthogonalbasis der Ebene, und zusammen mit eine Orthogonalbasis des .
Zum Normieren müssen die 3 noch jeweils durch ihren Betrag geteilt werden.

Spätestens an dieser Stelle solltest Du Dir allerdings überlegen, ob diese Methode angesichts der evtl. auftretenden Rundungsfehler bei Verwendung von Zwischenergebnissen noch für die gewünschte Genauigkeit taugt.

Auch der Rechenaufwand ist schon erheblich (es folgt ja noch einiges) und wenn Du das für "tausende" Ebenen machen willst ...

Ich stell das erstmal so hier rein. Zu Punkt 2 (Reihenfolge) kann ich dann noch ergänzen.
conito Auf diesen Beitrag antworten »

Hallo Klauss,

danke schon einmal für deine Mühe. Am Ende werde ich das Ganze natürlich automatisieren, daher sind "tausende" Ebenen hier relativ zu verstehen. Ich sollte bzw. will es allerdings einmal verstehen, um die entsprechenden Algorythmen programmieren zu können.

Jedenfalls: Was du geschrieben hast, leuchtet mir schon einmal ein. Ich denke Rundungsfehler werden nicht das Problem, da ich bzw. ein Automatismus mit acht Nachkommastellen rechnen werde/wird. Später werden allerdings nur vier weitergegeben, wovon eigentlich nur zwei, an einigen Stellen drei relevant sind.

Denkst du, das haut hin oder wird die Ungenauigkeit trotzdem zu groß?

Interessant ist jetzt natürlich, wie es weitergeht, also die Transformation der ursprünglichen Koordinaten smile
 
 
klauss Auf diesen Beitrag antworten »

Um die Genauigkeit zu erhöhen, könnte man natürlich statt gerundeten Zwischenergebnissen formelhafte Ausdrücke aus vorherigen Schritten verwenden, aber das bläht den Programmcode wieder entsprechend auf.

Anmerkung zur Reihenfolge:
Die Orientierung als Rechtssystem wähle ich deshalb, weil man die Regressionsebene dann nur noch entsprechend in die x-y-Ebene eindrehen muß, d. h. eine zusätzliche Spiegelung durch die Korrektur der Orientierung kann vermieden werden. Ist vielleicht nicht unbedingt notwendig, aber anschaulicher.
Zur Überprüfung bilde ich nochmal das Kreuzprodukt

und stelle also fest, dass in der Reihenfolge
die neue Basis des dieselbe Orientierung hat wie die Standardbasisvektoren, da das Kreuzprodukt ein positives Vielfaches von geliefert hat. Wäre ein negatives Vielfaches rausgekommen, hätte ich einfach und vertauschen müssen.
Wie gesagt, diese neuen Basisvektoren müssen jetzt noch auf Länge 1 normiert werden.
Dann könnte man sich an die Bestimmung der Abbildungsmatrix machen - was ich heute aus Zeitgründen aber nicht mehr schaffe.
Ich hoffe, dass ich da in den nächsten Tagen drankomme, wenns Dir nicht direkt eilt.
conito Auf diesen Beitrag antworten »

Okay, Normierungen auf 1 ist kein Problem, einfach du den jeweiligen Betrag teilen.

Vielleicht kannst du mir nur kurz mit Worten mitteilen, wie ich nun meine ursprünglichen Punkte transformieren. Multipliziere ich jeden einzelnen nun mit der Matrix aus b1, b2, b3 (jeweils als Spalten geschrleben) oder mit der Inversen eben dieser Matrix oder aber mit dem Produkt aus der Matrix und der Inversen?
klauss Auf diesen Beitrag antworten »

So, nach einmal drüber schlafen lichtet sich der Nebel, weshalb ich feststellen kann, dass ich mit der Bezeichnung Abbildungsmatrix etwas zu weit gegangen bin, denn wir wollen ja zunächst mal nur mal einen Basiswechsel vornehmen und nach diesem noch nichts weiter abbilden.
Das vereinfacht die Sache sehr.
Ich habe also die neuen Basisvektoren b1, b2 und b3 normiert und schreibe diese spaltenweise in eine Matrix:



Diese Matrix rechnet mir Koordinaten zur Basis B in Koordinaten zur Standardbasis um. Da Dir aber wohl in den Punktwolken immer Koordinaten zur Standardbasis vorliegen, müssen diese umgekehrt in Koordinaten zur Basis B umgerechnet werden. Das erledigt die Inverse .
Da orthogonal, ist , also



Zur Bestätigung kannst Du ja mal ausrechnen, dann sollte "im Prinzip" die Einheitsmatrix rauskommen - mit Rundungsungenauigkeit, die aber vernachlässigbar wird, wenn man Nachkommastellen passend abschneidet.

Jedenfalls wird nach dem Basiswechsel die positive z-Richtung, also die 3. Komponente der neuen Koordinatenvektoren, repräsentiert durch den Normalenvektor b3 der Regressionsebene.
Hoffe, das entspricht Deinen Vorstellungen.


Was jetzt noch zu berücksichtigen wäre, ist die Verschiebung der Ebene/Punktwolken, die man vor dem Basiswechsel machen muß, denn die Regressionsebene ging ja nicht durch den Ursprung.
Neue Frage »
Antworten »



Verwandte Themen

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