2013-12-18 82 views
1

我需要找到一个算法,使用两个3D网格(一组点和三角形)检查是否有可能找到一个矩阵4x4,它将第一个变换为第二个。 矩阵可以包含比例,旋转和平移,并且点的顺序和三角形的顺序不能相同。比较两个3Dmesh

有人已经找到关于这个问题的论文/文章/学术研究?

+1

您可以使用[ICP](http://en.wikipedia.org/wiki/Iterative_closest_point)的变体。要引入缩放,可以将两个模型重新缩放到单位边界球。在彼此拟合点之后,您必须检查三角形。 –

回答

1

我鑫卡特关于这个问题,我制定了这个算法: 比较2目01和02

  1. 移动的两个中心原点,现在我们有T1申请O1和T2适用于O2(我更喜欢这种方式,而不是只移动一个物体)
  2. 将距离d1和d2的网格F1和F2的距离设置为更远,并将O2的比例设置为s2 = d1/d2,现在2个物体具有相同的尺寸
  3. 创建一个旋转(使用lookat算法),使F2与F1重合。
  4. 取O1中的点P1作为从他与F1的距离df1和他距离原点fp(它是一个圆,因为它是2个球的交点)中定义的圆中唯一的点
  5. 在O2中找到一个点P2与原点和F2(现在与F1重合)具有相同的距离,如果这个点不存在,那么这两个对象是不同的。
  6. 创建沿着轴线原点-F2,使P2重合P1
  7. 的旋转,如果在O1每个点有转化在O2点在于具有在O2以及用于在O1每个三角形有相同的位置一个三角形在O2的相同位置转换成

    然后2个网格是相同的。

    否则2个网格是不同的。

+0

不错而简单的算法:) – Kromster

+1

好的一个。但请注意这种算法的局限性。可能有多于一个最远的顶点(例如,对于球体或圆环)。这同样适用于P1的选择。距离df1和fp的距离可能没有意义。例如。对于圆锥体来说,如果尖端是最远顶点并且其轴线穿过原点。然后所有其他顶点与尖端和原点的距离相同。 –

+0

另一个问题是,由于存储和处理方式的不同,浮点值与某些容差相比(例如4.9999876和5.0000142可能相同) – Kromster