[CLOSED]Как определить...

evgenych

Задача вобщем такая, есть матрица, вначале она единичная. Затем, пользователь делает с ней большое количество стандартных преобразований вида "поворот на угол альфа вокруг вектора x,y,z". С большим количеством преобразований начинают накапливаться ошибки вычислений (значение det со временем начинает отличаться от 1). Чтобы не было деградации, я раз в N шагов домножаю матрицу на число так, чтобы det==1.
Но этого наверно недостаточно (Например матрица diag(0.5, 2, 1) не является матрицей поворота, хотя ее det==1 поэтому интересует есть ли какито другие методы приведения матрицы к "нормальному" виду.

vovatroff

Переортогонализуй ее строки или столбцы.
По определению, получится ортогональная матрица.
Можно по Граму-Шмидту, но лучше симметрическая
ортогонализация.

natunchik

Если у тебя работа с этой матрицей достаточно хорошо инкапсулирована, то есть реальная маза заменить её на кватернион, все действия производить с ним, а строить матрицу в самом конце, когда нужно уже умножать вектора. Тогда никаких проблем не будет, почти наверняка повысится общая точность, нахаляву появятся новые возможности типа сферической интерполяции, и даже не исключено что повысится скорость.

evgenych

Переортогонализуй ее строки или столбцы.
О точно, должно быть оно Как это я забыл.
то есть реальная маза заменить её на кватернион
Я уже забыл что это такое (Если вообще знал). Завтра посмотрю, может так и сделаю.
Всем спасибо!
Оставить комментарий
Имя или ник:
Комментарий: