如何对齐两个网格

Nic*_*las 5 c mesh computational-geometry

我有一个非常好的和棘手的问题.我需要使用非常快的算法对齐两个网格.给定mesh1和mesh2我想找到我需要如何traslate并将mesh1旋转到mesh2的相同位置.首先,我使用两个网格的惯性矩来做到这一点,但如果第二个网格与第一个网格类似但有一些缺失部分,则算法不起作用.换句话说,取两个相同的网格,并从其中一个切掉相同的部分.

我想用C语言编写代码,因为我需要在多平台机器(linux/win)上执行它,并以非常快的方式执行:必须将其放入GA算法中.

这两个网格采用STL(立体绘图)格式(二进制或ascii),但使用其他类型的文件格式可能很有用.

你知道怎么做这个东西吗?

问题更新:

首先,我非常感谢你们所有的建议.我在我的机器上下载了一个安装PCL并成功编译了ICP(教程)算法,取自PCL网站.但现在我对此有一些疑问,也许是因为对我来说是一件全新的事情.健身的4x4矩阵输出是什么意思?我应该期待一个旋转矩阵和一个traslational矢量..

我希望你们中的一些人可以帮助我.如果您需要任何其他信息,请询问.

yur*_*les 4

点云库有一些您可能会觉得有用的资源。正如 @Throwback1986 所说,ICP 是一种出色的几何对齐算法。Pcl 还具有其他通常更快的对齐算法,基于识别和匹配两个几何体中感兴趣的特征。该库在机器人社区中有很多用途,他们和您一样非常注重性能。

Pcl是用C++编写的。虽然不如直接 C 那样便携,但它们提供了 Windows、一些 *nix 版本和 macOS 的安装说明。我也见过它在 ios 和 android 上运行。查看教程