rotateframe

Вращение системы координат кватерниона

Описание

пример

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

Frame Rotation

Примеры

свернуть все

Задайте точку в трех измерениях. Координаты точки всегда задаются в порядке 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 object. The axes object 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 object. The axes object contains 3 objects of type line.

Задайте две точки в 3-мерном пространстве. Задайте кватернион, чтобы повторно сослаться на точки первым вращением системы координат об оси 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 object. The axes object contains 8 objects of type line.

Входные параметры

свернуть все

Кватернион, который задает вращение в виде скалярного кватерниона или вектора из кватернионов.

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

3D Декартовы точки в виде 1 3 вектора или N-by-3 матрица.

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

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

свернуть все

Декартовы точки заданы в отношении вращаемой системы координат, возвращенной как вектор или матрица тот же размер как cartesianPoints.

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

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

Алгоритмы

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

Lq(u)=q*uq

где q является кватернионом, * представляет спряжение, и u является точкой, чтобы вращаться в виде кватерниона.

Для удобства, rotateframe функционируйте берет точку в R3 и возвращает точку в R3. Учитывая вызов функции с некоторым произвольным кватернионом, q = a + b i + c j + d k и произвольная координата, [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