Я перечитал ваш вопрос, и ответ ниже (хотя и правый) не дает вам то, что вы хотите.Эта ссылка о построении матрицы вращения 3x3 .
, так как они оба являются ортогональными единичными векторами, вам просто нужно добавить еще один, чтобы построить базис (используйте для этого перекрестный продукт).Итак, теперь у вас есть два базиса {A, B, AxB} и {C, D, CxD}.Вращение, которое перемещает {A, B} на {C, D}, будет повторно выражать вектор a1A + a2B + a3 (AXB) как b1C + b2D + b3 (CxD).потому что он линейный, вам нужно только знать, как он ведет себя на основе (это однозначно определяет линейное преобразование).Итак, взяв {A, B, ..} за основу и допустив преобразование равным T, мы видим, что T (1, 0, 0) = C, T (0, 1, 0) = D и T (0,0, 1) = CxD.Помните A = (1, 0, 0) и т. Д. Но столбцы этой матрицы просто M = (C, D, CxD)
Чтобы использовать эту матрицу в том виде, в каком она есть, вы должны выразить каждый вектор вБазис {A, B, CxD} перед тем, как вы ушли влево, умножьте на M. Вы делаете это таким же образом.Фактически, это N - это матрица, которая переводит из вашего обычного базиса в {A, B, ..}, а M выше переводит это в {C, D ...}, тогда MN (умножение слева здесь) будет переводить из вашего базисана {C, D, ..} и укажите желаемое вращение.
Итак, теперь все ваши векторы выражены в базисе {C, D, ..}: (
Решением является еще одна матрица преобразования. Эта карта отображается из {A, B, ..} к вашей основной базе и отменяет N, также известное как обратное и обозначаемое N ^ -1. Таким образом, ваша конечная матрица (N ^ -1) MN. Хорошая новость заключается в том, что, поскольку N ортогонально, вам просто нужноэто транспонирование.
Хитрость заключается в том, чтобы выбрать первичную основу так, чтобы матрицы, с которыми вы имеете дело больше всего, были симпатичными.