optimization - 解决 3d 多边形网格的最佳对齐问题

标签 optimization math geometry matrix computational-geometry

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

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

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

这方面的一个例子是立方体。原型(prototype)将是单位立方体,以原点为中心,带有顶点索引:

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

那么,给定原型(prototype)和那些点,我如何找到单个比例因子,以及关于 x、y 和 z 的旋转,以最小化顶点和那些位置之间的距离?最好将该方法推广到任意网格,而不仅仅是立方体。

最佳答案

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

minimize Norm(T*V-M)

其中 T 是您要查找的变换矩阵,V 是要拟合的顶点,M 是原型(prototype)的顶点。范数是指 Frobenius 范数。 M 和 V 是 3xN 矩阵,其中每一列是原型(prototype)顶点和拟合顶点集中相应顶点的 3 向量。 T 是一个 3x3 变换矩阵。那么最小化均方误差的变换矩阵是inverse(V*transpose(V))*V*transpose(M)。生成的矩阵通常不是正交的(您想要一个没有剪切的矩阵),因此您可以解决矩阵 Procrustes 问题以使用 SVD 找到最近的正交矩阵。

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

关于optimization - 解决 3d 多边形网格的最佳对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1750796/

相关文章:

geometry - 通过 raphael js 圆形图像蒙版?

c++ - 当您首先绘制具有相似纹理的 Sprite 时,sf::RenderWindow 是否绘制得更快

algorithm - 位掩码与布隆过滤器

C# - 代码优化以从字符串中获取所有子字符串

Android - 计算没有矩阵的像素旋转?并检查像素是否在 View 中

javascript - 寻找封闭路径的多边形近似

c++ - 什么是复制省略和返回值优化?

javascript - 整数转字符串,如何修复以下错误: "TypeError: Can' t convert undefined to object"?

vba - Excel 2007 VBA 计算错误

python - 如何检查笛卡尔坐标是否有效构成矩形?