矩阵在空间中的旋转会导致移动,而不会旋转到Matlab上的位置

矩阵在空间中的旋转会导致移动,而不会旋转到Matlab上的位置,matlab,matrix,rotation,geometry,ellipse,Matlab,Matrix,Rotation,Geometry,Ellipse,矩阵包含椭球面的点云。需要旋转的矩阵和质心不应移动到任何地方 椭球体的质心位于[xc1,yc1,zc1] 旋转方式应确保点[xp1,yp1,zp1]的新位置应位于参考点[rx,ry,rz]。点和参考点的半径相等。整个矩阵将只跟随该点旋转 为了完成这项任务,我尝试在xy、yz和xz平面上找到直线从[xc1,yc1,zc1]到[xp1,yp1,zp1]的投影,并找到角度。此部分按图所示完成。然后对[xc1,yc1,zc1]和[rx,ry,rz]之间的行重复相同的过程 iniV = [xc1 - xp

矩阵包含椭球面的点云。需要旋转的矩阵和质心不应移动到任何地方

椭球体的质心位于
[xc1,yc1,zc1]

旋转方式应确保点
[xp1,yp1,zp1]
的新位置应位于参考点
[rx,ry,rz]
。点和参考点的半径相等。整个矩阵将只跟随该点旋转

为了完成这项任务,我尝试在xy、yz和xz平面上找到直线从
[xc1,yc1,zc1]
[xp1,yp1,zp1]
的投影,并找到角度。此部分按图所示完成。然后对
[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); 
我假设点和参考点的角度差会告诉我绕每个轴旋转需要多少。i、 e:yz平面上的角度将给出绕x轴旋转所需的角度

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]

  • 将矩阵移动到原点[0,0,0]
  • 执行旋转
  • 将矩阵移回其初始中心位置[xc1,yc1,zc1]

  • 只是一个想法:将矩阵居中于[0,0,0]->进行旋转->将其恢复到[xc1,yc1,zc1]好的,开始工作。请回答我会接受的