Korrekte Skalierung einer 4x4 Matrix ermitteln



  • Hallo,

    ich habe in C++ eine eigene 4x4 Matrix Klasse, für Transformationen im 3 dimensionalen Raum, geschrieben.
    Mit der Funktion "GetScale" ermittle ich die Skalierung der jeweiligen Matrix.
    Diese Funktion ist allerdings noch sehr primitiv und sieht follgender Maßen aus:

    class Matrix4x4
    {
        /* ... */
        float pMat[4*4];
    };
    
    /* ... */
    
    vector3d Matrix4x4::GetScale()
    {
        return vector3d( pMat[0], pMat[5], pMat[10] );
    }
    

    Bei dieser Funktiom stimmt der Wert nicht mehr, sobald ich die Matrix rotiere.
    Wie kann ich also die korrekte Skalierung ermitteln, auch wenn die Matrix rotiert ist?



  • Dazu musst die 3x3 Teil-Matrix mit einer Polardekompostion in einen Anteil mit Rotationen und Scherungen bzw. Skalierungen zerlegen. Ist nicht ganz trivial ...



  • stichwort: eigenwerte


Anmelden zum Antworten