解决3d多边形网格的最佳对齐

时间:2009-11-17 18:23:23

标签: optimization math geometry matrix computational-geometry

我正在尝试实现几何模板引擎。其中一个部分是采用原型多边形网格,并将实例化与较大对象中的某些点对齐。

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

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

这个例子就是一个立方体。原型将是以原点为中心的单位立方体,其顶点索引为:

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

要适合的垂直位置示例:

  • 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的旋转,它们将最小化顶点和那些位置之间的距离?最好将该方法推广到任意网格,而不仅仅是一个立方体。

2 个答案:

答案 0 :(得分:6)

假设您有所有积分及其对应关系,您可以通过解决最小二乘问题来微调您的匹配:

minimize Norm(T*V-M)

其中T是您要查找的变换矩阵,V是要拟合的顶点,M是原型的顶点。 Norm指的是Frobenius规范。 M和V是3xN矩阵,其中每列是原型的顶点的3矢量和拟合顶点集中的对应顶点。 T是3x3变换矩阵。然后,最小化均方误差的变换矩阵是inverse(V*transpose(V))*V*transpose(M)。结果矩阵通常不是正交的(你想要一个没有剪切的矩阵),所以你可以求解矩阵Procrustes问题,找到最接近SVD的正交矩阵。

现在,如果您不知道哪些给定点将对应于哪些原型点,您要解决的问题称为曲面注册。这是一个活跃的研究领域。例如,请参阅this paper,其中也包含刚性注册,这就是您所追求的目标。

答案 1 :(得分:0)

如果要在任意3D几何体上创建网格,这不是通常的方式。

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

如果你的几何体是一个3D体,你所拥有的只是一个表面描述。确定“最佳”内部点是没有意义的,因为你没有任何内容。你会希望它们的排列方式使得里面的四面体不会太扭曲,但这是你能做的最好的。