tfi*_*iga 3 math optimization geometry matrix computational-geometry
我正在尝试实现几何模板引擎.其中一个部分是采用原型多边形网格,并将实例化与较大对象中的某些点对齐.
因此,问题在于:给定多边形网格中某些(可能是全部)顶点的三维点位置,找到一个缩放旋转,最小化变换顶点和给定点位置之间的差异.如果有帮助的话,我还有一个可以保持固定的中心点.顶点和3d位置之间的对应关系是固定的.
我认为这可以通过求解变换矩阵的系数来完成,但我有点不确定如何构建系统来解决.
一个例子是立方体.原型将是以原点为中心的单位立方体,具有vert索引:
4----5
|\ \
| 6----7
| | |
0 | 1 |
\| |
2----3
Run Code Online (Sandbox Code Playgroud)
要适合的vert位置的示例:
因此,考虑到原型和那些点,我如何找到单个比例因子,以及关于x,y和z的旋转,它们将最小化顶点和那些位置之间的距离?最好将该方法推广到任意网格,而不仅仅是一个立方体.
假设您拥有所有积分及其对应关系,您可以通过解决最小二乘问题来微调您的匹配:
minimize Norm(T*V-M)
Run Code Online (Sandbox Code Playgroud)
T你正在寻找的变换矩阵在哪里,V是要拟合的顶点,M是原型的顶点.Norm指的是Frobenius规范.M和V是3xN矩阵,其中每列是原型的顶点的3矢量和拟合顶点集中的对应顶点.T是3x3变换矩阵.然后,最小化均方误差的变换矩阵是inverse(V*transpose(V))*V*transpose(M).得到的矩阵一般不是正交的(你想要一个没有剪切的矩阵),所以你可以求解矩阵Procrustes问题,找到最接近SVD的正交矩阵.
现在,如果您不知道哪个给定点将对应于哪个原型点,那么您要解决的问题称为曲面注册.这是一个活跃的研究领域.例如,参见本文,其中也包括刚性注册,这就是您所追求的.