我在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)已经失败。
为什么不简单地在飞机上投影所有的点,然后旋转所有的东西,这样你就可以用他们的xz(或xy)坐标绘制点? – 2009-06-21 14:30:01
或者直接将相机安装在飞机上,直接看相机。 – 2009-06-21 14:31:18
相机的想法是一个很好的想法。将摄像机从原点平面移出距离法线一段距离。然后你将相机指向原点。当然,这假定你有相机投影代码,可以用旋转或矢量来完成。 – Nosredna 2009-06-21 20:34:56