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.

Задайте две точки в 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. The axes contains 8 objects of type line.

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

свернуть все

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

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

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

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

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

свернуть все

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

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

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

Алгоритмы

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

Lq(u)=q*uq

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

Для удобства, rotateframe функция принимает точку в R3 и возвращает точку в R3. Учитывая вызов функции с некоторым произвольным кватернионом, q = a + b я + <reservedrangesplaceholder4> j + <reservedrangesplaceholder3> 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++ с помощью Coder™ MATLAB ®

.
Введенный в R2018b