Rotationsmatrix bestimmen
-
Hab das Ganze mal in MatLab ausprobiert. Doch leider scheint bei meiner Vorgehensweise (siehe vorheriges Posting) etwas falsch zu sein. Denn die Transformation eines Punktes und anschliessende Rücktransformation mit der transponierten Matrix liefert nicht den ursprünglichen Punkt. Auch sollte doch die Determinante der (orthogonalen) Matrix 1 sein, wenn ich das bei wikipedia richtig interpretiert habe?
Die Vektoren v,w und n haben übrigens alle den Betrag 1. Und als Test habe ich das Skalarprodukt von (n,w), (n,v) und (v,w) ausgerechnet; alle 0 (so bis zur 16-ten Nachkomma stelle :))
Hat jemand einen Tipp, was falsch sein könnte?
-
poiz schrieb:
Auch sollte doch die Determinante der (orthogonalen) Matrix 1 sein, wenn ich das bei wikipedia richtig interpretiert habe?
ja, wenn du zwei vektoren vertauscht hast, -1. alles andere ist ein fehler.
Die Vektoren v,w und n haben übrigens alle den Betrag 1. Und als Test habe ich das Skalarprodukt von (n,w), (n,v) und (v,w) ausgerechnet; alle 0 (so bis zur 16-ten Nachkomma stelle :))
zeig' mal dein matlab-notebook, klingt eigentlich alles richtig.
-
hier der code:
%Equation of the plane A = 0.104147; B = 0.374972; C = 0.921167; D = -12.8989; %with the normal vector n = [A B C]; %point p1 on the plane p1 = [21.4435 5.0538 9.5212]; %test must be zero %point_on_plane = A*p1(1) + B*p1(2) + C*p1(3) + D %point p2 on the plane p2 = [3.8097 14.9123 7.5018]; %point_on_plane = A*p2(1) + B*p2(2) + C*p2(3) + D %vector w w = p2 - p1; %add plane normal to p1 %does something goes wrong here? n_v = p1 + n; %vector v v = cross(n_v,w); w = w/norm(w); v = v/norm(v); %create Matrix M = [v(1) w(1) n(1); v(2) w(2) n(2); v(3) w(3) n(3)]; %test det_equals_one = det(M)
-
Hi,
wieso addierst du etwas zur normalen? die zeigt doch schon in die richtige richtung.
wenn du eine verschiebung zusätzlich zur drehung haben willst, dann musst du diese auf jeden punkt einzeln anwenden:x' = M ( x - p )
und da du v = n_v x w machst, aber n in die matrix packst, ist diese auch nicht mehr orthogonal
-
Ok, ich hab mir da was falsch überlegt. Ich wollte damit keine Verschiebung erreichen
Jetzt sieht's aber gut aus:
[snip] %vector w w = p2 - p1; %vector v v = cross(w,n); %why not cross(n,w)? w = w/norm(w); v = v/norm(v); %create Matrix M = [v(1) w(1) n(1); v(2) w(2) n(2); v(3) w(3) n(3)];
Wobei mir nicht ganz klar ist, ob ich
v = cross(w,n)
oder
v = cross(n,w)
rechnen muss? Die erste Variante gibt eine Determinante von 1, die Zweite -1. n steht ja orthogonal auf der Ebene in Richtung der positiven z-Achse. Und der Vektor w liegt in der Ebene. Also müsste v doch n x w sein, was aber -1 als Determinante gibt.
Bei Wikipedia steht, dass die Determinante von 1 der orthogonalen Matrix einer Drehung entspricht, was ich ja möchte.
-
poiz schrieb:
rechnen muss? Die erste Variante gibt eine Determinante von 1, die Zweite -1. n steht ja orthogonal auf der Ebene in Richtung der positiven z-Achse. Und der Vektor w liegt in der Ebene. Also müsste v doch n x w sein, was aber -1 als Determinante gibt.
Bei Wikipedia steht, dass die Determinante von 1 der orthogonalen Matrix einer Drehung entspricht, was ich ja möchte.Determinante = 1 ist auf jedenfall richtig, sonst wird das ganze nicht nur gedreht, sondern auch noch gespiegelt.
für v = n x w ist (v,n,w) ein rechtshändiges system. das bildest du ab auf (v -> e_x, n -> e_z, w -> e_y), was ein linkshändiges system ist. deswegen determinante -1.
-
Vielen Dank für deine Hilfe
Dann rechne ich v = w x n und geh mal davon aus, dass das für jeden Vektor w der in der Ebene liegt, richtig rauskommt.
Danke!
-
Ich bin mir nicht sicher, ob wir das nicht schon in einem anderen Thread hatten, aber wie heißt eine Matrix M, für die M = M^(-1) gilt?
-
D-U-D-E schrieb:
Ich bin mir nicht sicher, ob wir das nicht schon in einem anderen Thread hatten, aber wie heißt eine Matrix M, für die M = M^(-1) gilt?
einheitsmatrix
-
thordk_ schrieb:
D-U-D-E schrieb:
Ich bin mir nicht sicher, ob wir das nicht schon in einem anderen Thread hatten, aber wie heißt eine Matrix M, für die M = M^(-1) gilt?
einheitsmatrix
und alle wurzeln davon
-
Ich glaube nicht, dass es dafür einen feststehenden Begriff gibt, das ist eine ziemlich große Klasse von Matrizen, mindestens schonmal alle Matrizen, die zu einer Diagonalmatrix mit nur 1en und -1en auf der Diagonalen ähnlich sind, beispielsweise [5 -2; 12 -5].
EDIT: Es sind sogar genau diese Matrizen.
-
Selbstinvers (involutorisch?) vielleicht?