Вращение матрицы в пространстве приводит к перемещению и не поворачивается для размещения на 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 ответ
- Переместить матрицу в начало координат [0, 0, 0]
- Выполните повороты
- Переместите матрицу обратно в ее начальное положение в центре [xc1,yc1,zc1]