Если у меня есть матрица из масштабирования, преобразования и преобразования вращения. Я хочу разделить эту матрицу на две матрицы. Один - матрица вращения + смещения, другой - матрица масштаба.
Я предполагаю, что эта матрица, о которой вы говорите, является матрицей 4х4, которая широко используется одними, широко презираемой другими, с четвертой строкой 0,0,0,1.
Я вызову эти две операции "масштабировать" и "вращать + переводить". Обратите внимание: эти операции не являются коммутативными. Масштабирование 3-вектора, а затем вращение / перемещение этого масштабированного вектора дает другой результат, чем если бы вы изменили порядок операций.
Случай 1, операция «повернуть + перевести», затем «масштабировать».
Пусть SR = S * R, где S - диагональная матрица 3x3 с положительными диагональными элементами (масштабирующая матрица), а R - ортонормированная матрица вращения 3x3. Строки матрицы SR будут ортогональны друг другу, но столбцы не будут ортогональны. Масштабные коэффициенты - это квадратный корень из норм строки матрицы SR.
Алгоритм:
Учитывая матрицу 4x4 A, получим масштабирующую матрицу 4x4 S, вращение 4x4 + матрицу трансляции T
A = [ SR(3x3) Sx(3x1) ]
[ 0(1x3) 1 ]
- Разделение A на матрицу 3x3 SR и вектор Sx 3, как показано выше.
- Построить масштабную матрицу S. Первые три диагональных элемента являются векторными нормами строк матрицы SR; последний диагональный элемент равен 1.
- Построить матрицу вращения 4x4 T +, разделив каждую строку A на соответствующий масштабный коэффициент.
Случай 2, операция «масштабирование», затем «поворот + перевод».
Теперь рассмотрим случай RS = R * S. Здесь столбцы A будут ортогональны друг другу, но строки не будут ортогональны. В этом случае масштабные коэффициенты являются квадратным корнем из норм столбцов матрицы RS.
Алгоритм:
Учитывая матрицу 4x4, получим матрицу вращения 4x4 + матрицу T перемещения, матрицу масштабирования 4x4 S
A = [ RS(3x3) x(3x1) ]
[ 0(1x3) 1 ]
- Разделение A на матрицу RS 3x3 и вектор x 3, как показано выше.
- Построить масштабную матрицу S. Первые три диагональных элемента являются векторными нормами столбцов матрицы RS; последний диагональный элемент равен 1.
- Построить матрицу T + вращения 4x4 путем деления каждой строки A на соответствующий масштабный коэффициент.
Если масштабирование не является равномерным (например, масштаб x на 2, y на 4, z на 1/2), вы можете определить порядок операций, посмотрев на внутренние произведения строк и столбцов верхнего 3x3 Матрица друг с другом. Масштабирование в прошлом (мой случай 1) означает, что внутренние продукты строки будут очень близки к нулю, но внутренние продукты столбца будут отличны от нуля. Масштабирование сначала (мой случай 2) полностью меняет ситуацию. Если масштабирование равномерное, невозможно определить, какой именно случай. Вы должны знать заранее.