2009-11-17 93 views
3

我试图实现几何模板引擎。其中一个部分是采用原型多边形网格,并将实例与大对象中的某些点对齐。解决三维多边形网格的最佳对齐问题

所以,问题是这样的:给定多边形网格中某些(可能是所有)顶点的三维点位置,找到一个缩放旋转,以最小化变换的顶点和给定点位置之间的差异。如果有帮助,我也有一个可以保持固定的中心点。 vert和3d位置之间的对应关系是固定的。

我在想这可以通过求解变换矩阵的系数来完成,但我有点不确定如何构建系统来解决。

一个例子是一个立方体。原型将是单位立方体,以原点为中心,以VERT指数:

4----5 
|\ \ 
| 6----7 
| | | 
0 | 1 | 
\| | 
    2----3 

的VERT位置的一个例子,以适应:

  • V0:1.243,2.163,-3.426
  • V1:4.190,-0.408,-0.485
  • V2:-1.974,-1.525,-3.426
  • V3:0.974,-4.096,-0.485
  • V5:1.974,1.525,3.426
  • V7:-1.243,-2.163,3.426

因此,考虑到样机和这些点,我该如何找到一个比例系数,以及关于X,Y旋转和Z将减少垂直和那些位置之间的距离?这种方法最好是可以推广到任意网格,而不仅仅是一个立方体。

回答

6

假设你有所有点和它们对应,则可以通过求解最小二乘问题微调匹配:

minimize Norm(T*V-M) 

其中T是你正在寻找的变换矩阵,V是适合的顶点,M是原型的顶点。规范是指Frobenius规范。 M和V是3×N矩阵,其中每列是原型的顶点的3向量和拟合顶点集合中的对应顶点。 T是一个3×3变换矩阵。那么最小化均方误差的变换矩阵是inverse(V*transpose(V))*V*transpose(M)。由此产生的矩阵一般不会是正交的(你想要一个没有剪切的矩阵),所以你可以求解一个矩阵Procrustes问题来找到最接近SVD的正交矩阵。

现在,如果您不知道知道哪个给定的点将对应哪个原型点,您要解决的问题称为曲面配准。这是一个活跃的研究领域。例如参见this paper,其中还包括刚性注册,这是您所追求的。

+0

这是非常有用的,特别是对Procrustes问题的参考。当你从T,V和M移到A和B时,我有点迷惘。他们如何相互关联? – tfinniga 2009-11-19 19:05:14

+0

对不起,A应该是V,B应该是M.我已经修复了这个问题。 – 2009-11-20 00:38:03

0

如果您想要在任意3D几何图形上创建网格,这不是通常的做法。

你应该看看八叉树网格生成技术。如果您使用真正的3D基元,这意味着四面体而不是立方体,那么您将获得更好的成功。

如果您的几何图形是3D物体,您将拥有的仅仅是一个表面描述。确定“最佳”内部点是没有意义的,因为你没有任何内容。你会希望他们被安排在内部的四面体不会太扭曲,但这是你能做的最好的。

+0

这是一个好点。在我的情况下,拓扑是非常重要的,而不是世界一致,这就是为什么我想要一个模板系统..我的输出将是一个细分曲面的控制笼。如果我不需要有一个好的拓扑结构,我可能会去隐式曲面/行军多维数据集路线。 – tfinniga 2009-11-18 03:56:23