Посмотрел статью, уточняю.
Если нам безразлично, какому преобразованию будет соответствовать наилучшая
— вращению или вращению с отражением, следует находить
как
. Узнать, присутствует ли отражение, можно по значению
.
Если мы хотим, чтобы преобразование, задаваемое
, было вращением, найдём
. Если определитель равен
, полагаем
.
Если же определитель равен
, значит, алгоритм решил, что с отражением можно добиться лучшего соответствия. Тогда надо громко произнести фразу: «Я принимаю ответственность за ухудшение точности попадания» и вычислить
по формуле
, где
— диагональная матрица, у которой на диагонали правый нижний элемент равен
, а остальные
. Можно, как было сказано, обойтись без
, например, умножая на
последний столбец
.
То, что именно правый нижний элемент
должен быть
, важно. Дело в том, что он соответствует наименьшему сингулярному числу матрицы
, и это гарантирует, что, полагая именно его равным
, мы совершаем «наименьшее зло», то есть минимально ухудшаем точность.
В Вашем примере с тремя точками наименьшее сингулярное число равно
. Соответственно, как с отражением, так и без, можно достигнуть одинаково хорошей точности.