Преобразовать матрицу вращения около одной системы координат в другую - PullRequest
5 голосов
/ 20 мая 2011

У меня есть плоскость, заданная вектором центральной точки и 3 векторами ортогональной ориентации в мировой системе координат (wcs), настроенная как матрица 3x3.Я определил матрицу вращения относительно системы координат этой плоскости, и теперь я хочу выяснить соответствующую матрицу вращения в мировой системе координат, которая соответствует этому вращению.То есть мне нужна новая матрица вращения, которая может применяться к объектам в wcs, чтобы соответствовать вращению, которое я вычислила относительно моей плоскости.

Я подумал взять обратную матрицу плоскости (вместо операции транспонирования, посколькумоя плоскость ортогональна) и умножьте ее на матрицу вращения, чтобы получить эквивалентное вращение в мировой системе координат.Это кажется неправильным, потому что:

Моя плоскость - это небольшое возмущение от wcs плюс поворот на 90 градусов вокруг оси y примерно: 0 0 -1 0 1 0 1 0 0, а вращение вокруг него - небольшое возмущениеединичной матрицы.Я ожидаю, что это небольшое вращение отобразится на маленькое вращение в wcs, но каким-то образом я получаю вращение на 90 градусов от плоскости, брошенной туда же.Где я ошибся в своей математике и как это сделать?

1 Ответ

4 голосов
/ 20 мая 2011

Ваше объяснение недостаточно ясно, чтобы я мог понять, что вы сделали неправильно, поэтому я просто расскажу вам, как это сделать с нуля.Следуйте этим указаниям, и вы сможете понять, как решить вашу проблему.

Ключ к выяснению преобразования координат матриц должен быть очень, очень ясным в том, что такое линейное преобразование, что такое матрицаи каково отношение.Я начну с основ.Я начну с повторения вещей, которые вы знаете, так что потерпите.Мне просто нужно быть уверенным, что мы находимся на одной странице с терминологией.

Линейное преобразование - это функция F, которая отображает одно векторное пространство в другое (которое часто является одним и тем же).

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

Учитывая два конечномерных векторных пространства, пару ассоциированных базисов a и b и линейное преобразование F между ними, мы можем записатьматрица выглядит следующим образом.

  1. Для каждого a_i в a запишите F(a_i) в основе b в виде столбца.
  2. Объедините эти столбцы, чтобы получитьматрица.

Эта операция окажется критической!

Таким образом, матрица зависит от линейного преобразования и пары вариантов базиса.Я буду представлять это как 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).

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

...