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.

Задайте две точки в 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')

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

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

свернуть все

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

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

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

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

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

свернуть все

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

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

Алгоритмы

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

Lq(u)=quq*

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

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

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