Вращение матрицы в пространстве приводит к перемещению и не поворачивается для размещения на Matlab

Матрица содержит облако точек поверхности эллипсоида. Нужно повернуть эту матрицу и центроид не должен никуда двигаться.

Центроид эллипсоида находится на [xc1,yc1,zc1]

Вращение должно быть таким, чтобы новое местоположение точки [xp1,yp1,zp1] должно быть в контрольной точке [rx,ry,rz], Радиус точки и ориентир равны. Вся матрица будет вращаться, следуя только этой точке.

Чтобы выполнить эту задачу, я попытался найти проекции линии от [xc1,yc1,zc1] в [xp1,yp1,zp1] на плоскостях XY, YZ и XZ и найти углы. Эта часть сделана как показано здесь. Затем повторили ту же процедуру для линии между [xc1,yc1,zc1] а также [rx,ry,rz],

iniV = [xc1 - xp1,yc1 - yp1,zc1 - zp1];
nextV = [xc1 - xr,yc1 - yr,zc1 - zr];

%Projected angles for point
[zRotIni, yRotIni, xRotIni] = projectionAngle(iniV); 
%Projected angles for refence
[zRotNext, yRotNext, xRotNext] = projectionAngle(nextV); 

Я предположил, что разность углов точки и ориентира даст мне информацию, сколько нужно вращать вокруг каждой оси. То есть: угол на плоскости YZ даст, сколько нужно повернуть вокруг оси х.

xRotAngle = xRotNext - xRotIni; 
yRotAngle = yRotNext - yRotIni;
zRotAngle = zRotNext - zRotIni;

С помощью функций Matlab вращение матрицы осуществляется, как показано ниже

rX = rotx(xRotAngle);
rY = roty(yRotAngle);
rZ = rotz(zRotAngle);

%vertexT is point cloud matrix
vertexRotT = rX * vertexT; %rotate around x axis
%After rotating around x, rotate around y axis
vertexRotT = rY * vertexRotT; 
vertexRotT = rZ * vertexRotT;

Результат показан на рисунке ниже.

  • Синий эллипсоид - оригинал
  • Синяя линия - вектор точки
  • Красная линия показывает контрольную линию

После поворота синяя и красная линии должны располагаться друг на друге. Однако весь эллипсоид переместился в новое место, координата центроида которого находится в [xc2,yc2,zc2] и точка находится на [xp2,yp2,zp2],

В результате предположение о вращении не сработало, и форма переместилась куда-то. Однако центр тяжести всегда должен быть закреплен на [xc1,yc1,zc1]

1 ответ

Решение
  1. Переместить матрицу в начало координат [0, 0, 0]
  2. Выполните повороты
  3. Переместите матрицу обратно в ее начальное положение в центре [xc1,yc1,zc1]
Другие вопросы по тегам