将3d平面上的点转换为2d坐标

Ujj*_*wal 5 3d geometry point-clouds

我有一个点云,所有点都位于3D空间的平面上.我需要将每个点转换为2D坐标,反之亦然.

协调系统A中的(x,y,z)=> 坐标系B中的变换矩阵(T1)=>(x,y)

(X,Y)坐标系 =>变换矩阵(T2)=>(X,Y,Z)坐标系中一个

我需要T1T2.坐标系B可以是任意参考系.

MBo*_*MBo 6

据我所知,所有点都在同一个平面上,你想减少尺寸,然后恢复坐标.

获得三个非共线点A,B,C.制作向量AB和AC.
正常到那个飞机是

 N = AB x AC //cross product
Run Code Online (Sandbox Code Playgroud)

现在规范化矢量AB和N得到单位U = uABuN.构建第二个基本向量(它是单位并位于平面中)

 V = U x uN
Run Code Online (Sandbox Code Playgroud)

现在你有四个基点 A, u=A+U, v=A+V, n=A+uN

转换(0,0,0), (1,0,0), (0,1,0), (0,0,1)应相应地将这些点映射到四联体.

现在关于仿射变换矩阵来进行这种映射:

      [Ax ux vx nx]   [0 1 0 0]
 M *  [Ay uy vy ny] = [0 0 1 0]
      [Az uz vz nz]   [0 0 0 1]
      [1  1  1  1 ]   [1 1 1 1]
Run Code Online (Sandbox Code Playgroud)

要么

  M * S = D
  M * S * Sinv = D * Sinv
  M = D * Sinv
Run Code Online (Sandbox Code Playgroud)

因此计算逆矩阵S=[Ax ux...]并获得所需的矩阵M.

将M应用于平面中的任何点给出具有零z分量的新坐标.

将M的逆应用于(x,y,0)得到给定平面中的3D坐标.


枫叶表与点A=1,1,1 B=2,1,1 C=1,1,2 (in plane Y=1)

新坐标AA,BB,CC具有零z分量.

对于同一平面中的任意点,映射后的z分量也为零.

 P:=vector([-2,1,7,1]);
 > PP := multiply(M, P);
 PP := [-3, 6, 0, 1]
Run Code Online (Sandbox Code Playgroud)