我在 3D 空间中有一组数据点,它们显然都落在一个特定的平面上。我使用 PCA 来计算平面参数。PCA 的第三个分量给了我平面的法向量(最弱的分量)。
我接下来要做的是将所有点转换到所述平面上并在 2D 中查看它。
我的想法是执行以下操作:
- 在平面上找一个中心点(平均点)
- 从所有数据点中减去它以将它们排列在原点周围
- 旋转法线使其变为 (0,0,-1)
- 将此旋转应用于所有数据点
- 使用正交投影(基本上,跳过z轴)
现在我一直在寻找正确的旋转操作。我尝试使用 acos 或 atan 并设置两个旋转矩阵。似乎这两种方法(使用 acos,使用 atan)都给了我错误的结果。也许你可以在这里帮助我!
Matlab代码如下:
b = atan(n(1) / n(2));
rotb = [cos(b) -sin(b) 0; sin(b) cos(b) 0; 0 0 1];
n2 = n * rotb;
a = atan(n(1) / n(3));
rota = [cos(a) 0 sin(a); 0 1 0; -sin(a) 0 cos(a)];
n3 = n2 * rotaows:
我希望n2
y 分量为零。但是,对于向量(-0.6367、0.7697、0.0467),这已经失败了。