坐标系变换,3d投影到2d平面

Coordinate system transformation, 3d projection to 2d plane

我有一个全局坐标系(X、Y、Z)和一个带点的三角形(A、B、C 和中心)。我知道这些点的所有坐标。

  1. 我需要将全局坐标系从 (0; 0; 0) 移动到三角形中心,以便所有点:A、B、C 和中心都有新的坐标,其中 Z = 0。之后我需要知道那些点的新坐标与新坐标系的关系。新坐标系的方向不重要
  2. 此外,如果有可能将 3D 点(三角形点)转换为 2D 平面而不丢失其几何形状(大小)。应该不是二维平面的投影。

>> A=[10.63307; -7.72528; 21.26636];
B=[4.06139; -12.49988; 21.26636];
C=[-6.57172; -20.22529; 13.14344];
Centr=[-4.38113; -13.48349; 18.55872];

>> V1=(B-A)/(norm(B-A))

V1 =

   -0.8090
   -0.5878
         0

>> V2=((C-A)-(dot((C-A),V1)*V1))/(norm((C-A)-(dot((C-A),V1)*V1)))

V2 =

    0.0000
   -0.0000
   -1.0000

>> V3=cross(V1,V2)

V3 =

    0.5878
   -0.8090
    0.0000

>> M=[V1,V2,V3]

M =

   -0.8090    0.0000    0.5878
   -0.5878   -0.0000   -0.8090
         0   -1.0000    0.0000

>> Anew=inv(M)*(A-Centr)

Anew =

  -15.5313
   -2.7076
    4.1666

>> Bnew=inv(M)*(B-Centr)

Bnew =

   -7.4083
   -2.7076
    4.1666

>> Cnew=inv(M)*(C-Centr)

Cnew =

    5.7350
    5.4153
    4.1666

这是我得到的: From this

To this

问题可以表示为找到 3×3 矩阵 M 使得点 P 的坐标可以在旧坐标系(P_old , 3 行) 和新坐标系 (P_new, 3 行)。这是一个仿射变换:

P_old = Center + M * P_new     (1)

M 的(矩阵向量)乘法将其定向回旧系统,并添加 Center 的坐标将其转换回旧原点。

等式(1)可化为:

P_new = M^{-1} * (P_old - Center)     (2)

其中 M^{-1}M 的倒数,用于根据旧坐标计算新坐标(如果该点属于三角形平面,则第三行将为 0)。

矩阵M由新基在旧系统中的坐标组成,每列一个基向量。现在必须找到这样一个基础。

这个依据可以取自(这都是伪代码):

  1. 重新规范化AB

           AB
    V1 = ______
        || AB ||
    
    • AB这里的意思是向量AB(上面有一个箭头):

      |b_x - a_x|
      |b_y - a_y|
      |b_z - a_z|
      
    • || . ||是欧几里德范数(^2表示平方,不是xor):

      || V || = sqrt(V_x^2 + V_y^2 + V_z^2)
      
  2. AC(也是一个向量,定义为 AB),但减去它在 V1 上的投影,使其与 V1 正交,并重新归一化(如果三角形不是真正的三角形,这将失败并被零除):

            AC - (AC.V_1) V1
    V2 = _______________________
         || AC - (AC.V_1) V1 ||
    
    • M.N是标量积:

      M.N = M_x * N_x + M_y * N_y + M_z * N_z
      
    • (AC.V_1) V1 只是标量 (AC.V_1) 与向量 V1

    • 的乘积
  3. 可以取叉积得到笛卡尔坐标系的第三个向量:

    V3 = V1 x V2
    
    • 叉积定义为:

                |V1_y*V2_z - V1_z*V2_y|
      V1 x V2 = |V1_z*V2_x - V1_x*V2_z|
                |V1_x*V2_y - V1_y*V2_x|
      

则M可以取为|V1 V2 V3|(每个Vx在3行),然后用公式(2)计算其逆。

此转换(使用倒置的 M)应该为三角形平面上第三轴为 0 的点生成新坐标(使其成为该平面上的二维坐标),并保持大小根据欧几里得范数。