Ваше объяснение недостаточно ясно, чтобы я мог понять, что вы сделали неправильно, поэтому я просто расскажу вам, как это сделать с нуля.Следуйте этим указаниям, и вы сможете понять, как решить вашу проблему.
Ключ к выяснению преобразования координат матриц должен быть очень, очень ясным в том, что такое линейное преобразование, что такое матрицаи каково отношение.Я начну с основ.Я начну с повторения вещей, которые вы знаете, так что потерпите.Мне просто нужно быть уверенным, что мы находимся на одной странице с терминологией.
Линейное преобразование - это функция F
, которая отображает одно векторное пространство в другое (которое часто является одним и тем же).
Учитывая конечномерное векторное пространство и базис, вы можете записать любой вектор в этом векторном пространстве уникальным способом в виде набора связанных координат.Представление, которое вы получаете, очень сильно зависит от основы.Мы обычно пишем это в виде вертикального столбца.
Учитывая два конечномерных векторных пространства, пару ассоциированных базисов a
и b
и линейное преобразование F
между ними, мы можем записатьматрица выглядит следующим образом.
- Для каждого
a_i
в a
запишите F(a_i)
в основе b
в виде столбца. - Объедините эти столбцы, чтобы получитьматрица.
Эта операция окажется критической!
Таким образом, матрица зависит от линейного преобразования и пары вариантов базиса.Я буду представлять это как M = F<sub>a</sub><sup>b</sup>
.
Композиция функций представлена умножением матрицы.Это F<sub>a</sub><sup>b</sup> * G<sub>b</sub><sup>c</sup> = (F o G)<sub>a</sub><sup>c</sup>
.(Весь смысл определения умножения матриц состоит в том, чтобы сделать это истинным.)
Теперь в вашем случае у вас есть линейное преобразование 'F' из R<sup>3</sup>
обратно в R<sup>3</sup>
.Он представлен в базе «b», и вы хотите, чтобы он был представлен в базе «a».То есть у вас есть F<sub>b</sub><sup>b</sup>
и вы хотите иметь F<sub>a</sub><sup>a</sup>
.Пусть I
будет тождественным линейным преобразованием, которое просто отправляет его себе.Затем F<sub>a</sub><sup>a</sup> = I<sub>a</sub><sup>b</sup> * F<sub>b</sub><sup>b</sup> * I<sub>b</sub><sup>a</sup>
и все, что вам нужно сделать, это выяснить, что такое матрицы I<sub>a</sub><sup>b</sup>
и I<sub>b</sub><sup>a</sup>
.
Теперь у вас есть ваши системы координат a
(обычные координаты) и b
.Вы знаете, что b
записано в системе координат a
.Следуйте указаниям выше для представления линейного оператора с помощью матрицы (та, которую я сказал, окажется критической), и вы можете сразу записать I<sub>b</sub><sup>a</sup>
.Матрица I<sub>a</sub><sup>b</sup>
является обратной к этой.
Обратите внимание, что многих смущает тот факт, что I<sub>a</sub><sup>b</sup>
- это обратное тому, что, как они думают, должно быть.Но это то, что легко испытать.Я настоятельно рекомендую вам попробовать это.Вставай.Поворот на 90 градусов.Обратите внимание, что пока вы поворачиваете в одну сторону, похоже, что мир поворачивает другой.Вы испытываете тот факт, что когда ваша система координат вращается в одну сторону, представление вещей делает обратное (т.е. вращается в другую сторону).
Редактировать : Объяснениелинейные операторы верны, однако заявленная проблема связана с поворотами вокруг точки, которая не является началом координатВсе линейные операторы отправляют источник в источник.Этот вид операции может отправить источник в другом месте.Поэтому нам нужно перейти от линейных функций к аффинным.Но, к счастью, аффинные функции не являются большим осложнением.Они буквально постоянная точка плюс линейный кусок.То есть вместо функций, которые могут быть представлены Mx
с M
матрицей, вы получаете функции вида p + Mx
с p
точкой и M
матрицей.
Во-первых, очень полезно ввести важное, но, казалось бы, произвольное различие.Точка есть точка.Вектор - это смещение между точками, которое может быть представлено как одна точка минус другая.Точки и векторы действительно разные вещи, и мы должны думать о них по-разному.
Вот причина, по которой мы проводим различие. Если F
является аффинной функцией на точках, то F
является линейной функцией, отображающей векторы на векторы. (Бит константы перемещает начальную и конечную точки вектора, но не меняет степень их смещения друг от друга.) Это позволяет легко разделить постоянную и линейную части аффинной функции.
Когда вы имеете дело с аффинными функциями, нет особой причины иметь дело только с системами координат, центрированными в начале координат, и часто есть веские причины не делать этого. Поэтому система координат определяется точкой p
и базисом a
для векторного пространства. (Немного сложнее, но не намного.) В этой системе координат произвольная точка q
может быть сопоставлена с вектором q - p
, а затем с этим вектором, представленным в базисе a
. Снова принято записывать эти координаты в виде столбца.
Теперь, если F
является аффинной функцией, то все, что вам нужно сделать, это вычислить линейную часть F
и добавить туда, где F
отправляет начало вашей системы координат.
Если вы собираетесь взять аффинную функцию в одной системе координат (p, a)
и преобразовать ее в другую (q, b)
, все, что вам нужно сделать, - это преобразовать линейный бит из базы a
в базу b
, а затем выясните, чем будет F(p)
.
Так что аффинные функции - это в основном линейные функции, в которые добавляется информация о том, куда идет источник. Большая часть работы посвящена матричному представлению линейной функции, но вы не можете забыть выяснить, что происходит с источником.