2016-08-02 25 views
0

Ich implementiere derzeit einen Algorithmus für die 3D-Punktwolkenfilterung nach einer wissenschaftlichen Arbeit.Rotationsmatrix, Normierung, Determinante -1

Ich habe einige Probleme bei der Berechnung der Rotationsmatrix für bestimmte Werte. Ziel ist es, Punkte in das Koordinatensystem zu rotieren, das durch die Richtung des Normalenvektors (Z-Achse) definiert ist. Da die folgende Abfrage in X, Y-Achse rotationssymmetrisch ist, spielt die Orientierung dieser Achsen keine Rolle. R wird wie folgt definiert: Rotationmatrix

[1  1 -(nx+ny)/nz] 
R = [ (row1 x row3)'  ] 
    [nx  ny  nz ] 

n normalisiert wird. Das Problem tritt auf, wenn n_z wirklich klein oder null wird. Daher zog ich in Betracht, Zeile 1 zu normalisieren, bevor das Kreuzprodukt für Zeile 2 berechnet wurde.

Trotzdem wird die Determinante -1. Wird die Rotationsmatrix zu korrekten Ergebnissen führen? R ist orthogonal, aber det | R | nicht +1

Dank für irgendwelche Vorschläge

Antwort

1

Sie erhalten immer, dass

det(a, a×b, b) = - det(a, b, a×b) 
= - dot(a×b, a×b) 

immer negativ ist. Daher müssen Sie die zweite Zeile ändern, indem Sie sie negieren oder die Reihenfolge der Zeilen neu anordnen.

+0

thx, fand heraus, dass ich nach dem Papier eine Reflexionsmatrix bekomme. Da die Orientierung in der Z-Achse keine Rolle spielt, hat dies keinen Einfluss auf die Ergebnisse. – andysfd

+0

Zum Vorteil anderer ist es in vielen Fällen problematisch, eine Transformation zu verwenden, die eine Reflexion enthält, wenn dies nicht beabsichtigt ist. Sofern nicht beabsichtigt, negiere ich zweitens einen der Vektoren, um rechtshändige Koordinaten zu erhalten. – sage

0

Haben Sie Interesse Punkte um beliebige Achse in Dreh? Wenn ja, ist vielleicht quaternions eine gute Lösung. Sie können this überprüfen, wenn Sie eine Quaternion in eine Matrix umwandeln möchten, bevor Sie sie tatsächlich verwenden.

Verwandte Themen