Работа с системами координат в среде Matlab

advertisement
Работа с системами координат в среде 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 2z⋅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 jz 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.
Download