exponenta event banner

rotateframe

Поворот кадра кватерниона

Описание

пример

rotationResult = rotateframe(quat,cartesianPoints) поворачивает опорную рамку для декартовых точек с помощью кватерниона, quat. Элементы кватерниона нормализуются перед использованием при вращении.

Примеры

свернуть все

Определите точку в трех измерениях. Координаты точки всегда задаются в порядке x, y и z. Для удобной визуализации определите точку на плоскости x-y.

x = 0.5;
y = 0.5;
z = 0;
plot(x,y,'ko')
hold on
axis([-1 1 -1 1])

Figure contains an axes. The axes contains an object of type line.

Создайте вектор кватерниона, задающий два отдельных поворота: один для поворота рамы на 45 градусов, а другой для поворота точки на 90 градусов вокруг оси Z. Использовать rotateframe для выполнения вращений.

quat = quaternion([0,0,pi/4; ...
                   0,0,-pi/2],'euler','XYZ','frame');
               
rereferencedPoint = rotateframe(quat,[x,y,z])
rereferencedPoint = 2×3

    0.7071   -0.0000         0
   -0.5000    0.5000         0

Постройте график точек, на которые сделаны ссылки.

plot(rereferencedPoint(1,1),rereferencedPoint(1,2),'bo')
plot(rereferencedPoint(2,1),rereferencedPoint(2,2),'go')

Figure contains an axes. The axes contains 3 objects of type line.

Определите две точки в трехмерном пространстве. Определите кватернион для повторной привязки точек, сначала повернув опорную рамку вокруг оси Z на 30 градусов, а затем вокруг новой оси Y на 45 градусов.

a = [1,0,0];
b = [0,1,0];
quat = quaternion([30,45,0],'eulerd','ZYX','point');

Использовать rotateframe для привязки обеих точек с помощью оператора вращения кватерниона. Просмотрите результат.

rP = rotateframe(quat,[a;b])
rP = 2×3

    0.6124   -0.3536    0.7071
    0.5000    0.8660   -0.0000

Визуализация исходной ориентации и повернутой ориентации точек. Построение линий от начала координат до каждой из точек в целях визуализации.

plot3(a(1),a(2),a(3),'bo');

hold on
grid on
axis([-1 1 -1 1 -1 1])
xlabel('x')
ylabel('y')
zlabel('z')

plot3(b(1),b(2),b(3),'ro');
plot3(rP(1,1),rP(1,2),rP(1,3),'bd')
plot3(rP(2,1),rP(2,2),rP(2,3),'rd')

plot3([0;rP(1,1)],[0;rP(1,2)],[0;rP(1,3)],'k')
plot3([0;rP(2,1)],[0;rP(2,2)],[0;rP(2,3)],'k')
plot3([0;a(1)],[0;a(2)],[0;a(3)],'k')
plot3([0;b(1)],[0;b(2)],[0;b(3)],'k')

Figure contains an axes. The axes contains 8 objects of type line.

Входные аргументы

свернуть все

Кватернион, определяющий поворот, определяемый как скалярный кватернион или вектор кватернионов.

Типы данных: quaternion

Трехмерные декартовы точки, заданные как вектор 1 на 3 или N-by-3 матрица.

Типы данных: single | double

Выходные аргументы

свернуть все

Декартовы точки, определенные в привязке к повернутому опорному кадру, возвращаемые в виде вектора или матрицы того же размера, что и cartesianPoints.

Тип данных рессорных декартовых точек совпадает с базовым типом данных quat.

Типы данных: single | double

Алгоритмы

Поворот рамки кватерниона повторно ссылается на точку, указанную в R3, путем поворота исходной рамки отсчета в соответствии с указанным кватернионом:

Lq (u) = q * uq

где q - кватернион, * - сопряжение, а u - точка вращения, заданная как кватернион.

Для удобства, rotateframe функция принимает точку в R3 и возвращает точку в R3. Учитывая вызов функции с некоторым произвольным кватернионом, q = a + bi + cj + dk и произвольной координатой, [x, y, z ],

point = [x,y,z];
rereferencedPoint = rotateframe(q,point)
rotateframe выполняет следующие операции:

  1. Преобразует точку [x, y, z] в кватернион:

    uq = 0 + xi + yj + zk

  2. Нормализует кватернион, q:

    qn = qa2 + b2 + c2 + d2

  3. Применяет поворот:

    vq = q * uqq

  4. Преобразует выход кватерниона vq обратно в R3

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2020a