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])

Создайте вектор кватерниона определение двух отдельных вращений, один, чтобы вращать точку 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')

Задайте две точки в 3-мерном пространстве. Задайте кватернион, чтобы вращать точку первым вращением об оси 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')

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

свернуть все

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

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

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

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

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

свернуть все

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

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

Алгоритмы

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

Lq(u)=quq*

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

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

Введенный в R2020a