exponenta event banner

rotatepoint

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

Описание

пример

rotationResult = rotatepoint(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. Использовать rotatepoint для выполнения поворота.

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

   -0.0000    0.7071         0
    0.5000   -0.5000         0

Постройте график повернутых точек.

plot(rotatedPoint(1,1),rotatedPoint(1,2),'bo')
plot(rotatedPoint(2,1),rotatedPoint(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');

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

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

    0.6124    0.5000   -0.6124
   -0.3536    0.8660    0.3536

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

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.

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

Алгоритмы

Поворот точки кватерниона вращает точку, заданную в R3, согласно заданному кватерниону:

Lq (u) = quq *

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

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

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

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

    uq = 0 + xi + yj + zk

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

    qn = qa2 + b2 + c2 + d2

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

    vq = quqq *

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

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

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

.

См. также

Функции

Объекты

Представлен в R2021a