Drehmatrix plus Skalierung

Neue Frage »

as_string Auf diesen Beitrag antworten »
Drehmatrix plus Skalierung
Meine Frage:
Hallo!

Das Problem, das ich zu lösen versuche, tritt beim Datenaustausch zwischen einem CAD-Programm und einer CAD-Daten-Verwaltung auf.
In CAD-Programmen unterscheidet man i. A. zwischen Baugruppen und Einzelteilen. Baugruppen enthalten Komponenten, die wieder andere Baugruppen oder eben Einzelteile sein können. Diese Komponenten sind im Raum platziert ("eingebaut"), normalerweise indem man Einbaubedingungen festlegt, wie z. B. die Fläche der einen Komponente soll mit einer bestimmten Fläche einer anderen Komponente zusammen fallen, etc., aber letztlich ist (normalerweise aufgrund solcher Einbaubedingungen) jede Komponente irgendwo im Raum positioniert.
Die Komponenten können dabei auch gedreht eingebaut sein.
Daraus kann man dann auch Transformationsmatrizen für jede Komponente ableiten. Das ist häufig eine 4x4-Matrix mit einer 3x3-Untermatrix, die der Drehung entspricht, und einem 3-er Vektor, der die Verschiebung bezüglich des Baugruppen-Koordinatenursprungs angibt. Häufig um eine Zeile (0, 0, 0, 1) erweitert, um auf die 4x4-Form zu kommen.

Manchmal kann aber auch noch eine Skalierung der eingebauten Komponente vorkommen. Ich habe diesen Fall bei meinem konkreten CAD-Programm, wenn die eingebaute Komponente ein anderes Einheitensystem benutzt, als die Baugruppe selbst. Da wird dann wohl der Längeneinheiten-Umrechnungs-Faktor als Skalierungsfaktor mit in die Drehmatrix eingerechnet, sprich die Drehmatrix ist dann keine mehr, sondern jede Komponente ist noch zusätzlich mit einem Faktor multipliziert.
Das Zielprogramm erwartet aber eine echte Drehmatrix (mit Determinante 1 und so) plus einen separaten Skalierungsfaktor. Meine Frage ist jetzt: Wie bekomme ich eine Matrix, die das Produkt aus einer Drehmatrix und einem skalaren Faktor ist, sinnvoll wieder in Drehmatrix und Faktor getrennt? Und zwar mit möglichst geringen Rundungsfehlern und möglichst effizient.

Meine Ideen:
Ich bin bisher so vorgegangen:
Die Determinante einer Drehmatrix ist +1. In meiner "skalierten Drehmatrix" ist sie nicht mehr 1, sondern , mit s dem Skalierungsfaktor. Ich habe also einfach die Determinante bestimmt, daraus die dritte Wurzel gezogen und mit dem Kehrwert jede Komponente multipliziert.
Allerdings habe ich festgestellt, dass ich da relativ große Rundungsfehler habe, obwohl ich mit double rechne. Außerdem ist es eventuell nicht gerade die effizienteste Methode, denke ich.
Eine andere Idee hatte ich: Da bei einer Drehmatrix ja inverse und transponierte Matrix die gleichen sind, sollte die Einheitsmatrix rauskommen, wenn ich transponierte und ursprüngliche multipliziere. Wenn aber ein Skalierungsfaktor drin ist, sollte als Ergebnis dieser Multiplikation eine Einheitsmatrix rauskommen, die mit dem Quadrat des Skalierungsfaktors multipliziert ist. Sprich, wenn:

dann sollte ja:

sein, so dass ich irgendein Diagonal-Element nehmen könnte und die Wurzel ziehen könnte. Ich habe mir aber noch nicht überlegt, ob erstens das Ergebnis wirklich genauer wäre und zweitens die Methode schneller wäre. Wahrscheinlich gibt sich das nicht viel.

Ich wollte einfach fragen, ob ich den Wald vor lauter Bäumen nicht sehe und es eigentlich eine ganz einfache und bessere Lösung gibt. Ich bin dankbar für Ideen!

Gruß
Marco
Neue Frage »
Antworten »



Verwandte Themen

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