Работа с системами координат в среде Matlab Автор: Цветков Е.А. www.mathstyle.org Оглавление Математические основы....................................................................................................................1 Преобразования координат в среде Matlab......................................................................................2 Матрица направляющих косинусов.............................................................................................2 Кватернионы...................................................................................................................................2 Углы поворота................................................................................................................................3 Математические основы Пусть e=[ e1 , e 2 , e 3] (1) строка, состоящая из векторов исходного ортонормированного базиса. Пусть новый ортонормированный базис f =[ f 1 , f 2 , f 3 ] (2) получен из старого вращением. Причем f =e⋅A , (3) где A=a i , j - ортогональная матрица ( A−1= AT ) преобразования векторов старого базиса в векторы нового базиса (матрица перехода от старого базиса к новому). Транспонированием формулы (3) получаем T −1 f =A ⋅e T . (4) Замечание: Ср. формулы (3) и (4). Пусть некоторый вектор r имеет координаты [ x , y , z ] в исходном базисе, то есть [] x r =x⋅e 1 y⋅e 2z⋅e 3=e⋅ y z , (5) а в новом базисе этот же вектор имеет координаты [ x ' , y ' , z ' ] , то есть [] x' r =x '⋅f 1 y '⋅ f 2 z '⋅ f 3= f ⋅ y ' z' Тогда справедливо соотношение . (6) [ ] [] x' x −1 y ' =A ⋅ y z' z , (7) выражающее координаты вектора в новом базисе через координаты вектора в старом базисе. A , соответствующая вращению базиса вокруг оси z на угол в Матрица положительном направлении (против часовой стрелки, если смотреть с конца вектора e 3 ), задается формулой [ cos −sin 0 A= sin cos 0 0 0 1 ] (8) Замечание: Эта матрица преобразует строку векторов старого базиса в строку векторов нового базиса по формуле (3). Замечание: Здесь и далее матрица A−1 преобразует столбец координат вектора в старом базисе в столбец координат в новом базисе. Преобразования координат в среде Matlab Матрица направляющих косинусов Матрица A называется матрицей направляющих косинусов. Умножая (3) слева на столбец e T и учитывая, что e T⋅e=E , получаем A=e T⋅f . Расписывая матрицу (9) A поэлементно, получаем a i , j =e i f j . (10) Так как оба базиса ортонормированы, то скалярное произведение в этой формуле равно косинусу угла между соответствующими векторами. В среде Matlab под матрицей направляющих косинусов понимается матрица A−1 . Кватернионы Кватернион q=x i y jz k задается строкой из четырех элементов q=[ x y z ] . (11) Матрицу поворота вокруг оси a = [a1 a2 a3], norm(a) = 1 на угол phi можно вычислить последовательностью команд q = [cos(phi/2) a*sin(phi/2)], M = quat2dcm(q). Получившаяся матрица M соответствует матрице A−1 в формуле (7), то есть преобразует старые координаты в новые. Если x = [x1; x2; x3] – столбец координат вектора в исходном базисе, то y = M*x задает столбец координат в новом базисе. Углы поворота Функция angle2quat(R1, R2, R3, S) создает кватернион Q, соответствующий вращению исходной системы координат последовательно на углы R1, R2, R3 вокруг осей, заданных в строке S. Допустимые значения для строки S: 'ZYX', 'ZYZ', 'ZXY', 'ZXZ', 'YXZ', 'YXY', 'YZX', 'YZY', 'XYZ', 'XYX', 'XZY', 'XZX'. Значение 'ZXZ' соответствует вращению на угол R1 вокруг оси Z, затем на угол R2 вокруг оси X и затем на угол R3 опять вокруг оси Z (эта последовательность соответствует углам Эйлера). Получившийся кватернион будет соответствовать матрице, преобразующей старые координаты в новые. Кватерион, соответствующий повороту на эйлровские углы psi, theta, phi получается выполнением команды q = angle2quat(psi, theta, phi, 'ZXZ') Его можно преобразовать в матрицу командой M = quat2dcm(q). Как и ранее, получившаяся матрица M соответствует матрице A−1 формуле (7), то есть преобразует старые координаты в новые. Матрицу M можно получить непосредственно командой angle2dcm(R1, R2, R3, 'ZXZ'), аргументы которой имеют такой же смысл, как и аргументы команды angle2quat.