在 Space 中旋转矩阵会导致移动并且不会旋转到 Matlab 上的位置
Rotation of Matrix in Space Results in Moving and do not Rotate to Place on 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 平面上的角度将给出绕 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]
矩阵包含椭球面的点云。需要旋转该矩阵,质心不应移动到任何地方。
椭球的质心在[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 平面上的角度将给出绕 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]