matlab - Matlab中矩阵在空间中的旋转会导致移动而不是旋转到放置位置

标签 matlab matrix rotation geometry ellipse

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

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

旋转的方式应使点[xp1,yp1,zp1]的新位置应位于引用点[rx,ry,rz]。点半径和引用半径相等。整个矩阵将沿着唯一的那个点旋转。

为了完成此任务,我尝试在 xy,yz 上找到从 [xc1,yc1,zc1][xp1,yp1,zp1] 的直线投影和 xz 平面并找出角度。这部分完成如图here 。然后对 [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;

结果如下图所示。 enter image description here

  • 蓝色椭球是原始的
  • 蓝线是点的向量
  • 红线显示引用线

旋转后,蓝线和红线应该重合。然而,整个椭球体移动到新位置,其质心坐标位于[xc2,yc2,zc2],点位于[xp2,yp2,zp2]

因此,旋转假设不起作用,形状移动到某个地方。但是,质心始终应固定在[xc1,yc1,zc1]

最佳答案

  1. 将矩阵移动到原点 [0, 0, 0]
  2. 执行轮换
  3. 将矩阵移回其初始中心位置 [xc1,yc1,zc1]

关于matlab - Matlab中矩阵在空间中的旋转会导致移动而不是旋转到放置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44919397/

相关文章:

python - 具有不同最后轴维度元素的 Numpy 数组

c - 将测试数据解析成C程序

algorithm - 使用小矩阵在巨大的凸矩阵中实现全局最小值

python - 不使用 numpy 获得对角线?

matrix - C++ 稀疏矩阵库

iphone - 某些 View Controller 独有的自动旋转

java - Android:围绕屏幕中心旋转 Canvas

ios - "Destroying"委托(delegate)后退按钮(或滑动)[UINavigationController]

matlab - 在 MATLAB 中计算组均值/中位数,其中组 ID 在单独的列中

matlab - 对重叠时间测量应用滚动窗口