我有一组数据点在三维空间中,它们显然都落在一个特定的平面上。 我使用主成分分析(PCA)计算平面参数。 PCA的第三个分量给出平面的法向量(最弱分量)。
接下来我想要做的是将所有点转换到所述平面上并在二维平面上查看它。
我的想法是进行以下操作:
- 在平面上找到一个中心点(平均点)
- 从所有数据点中减去它以使它们围绕原点排列
- 旋转法向量,使其变为 (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),这个期望已经失败。