Algorithm 如何判断两个三角形网格的相等性?

Algorithm 如何判断两个三角形网格的相等性?,algorithm,graphics,geometry,computational-geometry,mesh,Algorithm,Graphics,Geometry,Computational Geometry,Mesh,给定三维空间中的三角形网格。旋转并平移其所有点以生成新网格B 如何仅仅通过A和B的顶点和面来确定它们的相等性 网格的拓扑并不重要,我只关心几何相等,A和B应该相等,即使它们的三角剖分发生变化。它是 类似于三角形网格的方差变换问题,只考虑平移和旋转。仅假设三角形面 比较三角形的数量 如果不匹配,返回false 按三角形大小对三角形进行排序 如果两个网格之间的大小和顺序不匹配,则返回false 在形状中查找不同的三角形 所以要么是面积最大,要么是最小,要么是边缘长度,或者其他什么。如果不存在,那么您

给定三维空间中的三角形网格。旋转并平移其所有点以生成新网格B

如何仅仅通过A和B的顶点和面来确定它们的相等性

网格的拓扑并不重要,我只关心几何相等,A和B应该相等,即使它们的三角剖分发生变化。它是
类似于三角形网格的方差变换问题,只考虑平移和旋转。

仅假设三角形面

  • 比较三角形的数量

    如果不匹配,返回
    false

  • 按三角形大小对三角形进行排序

    如果两个网格之间的大小和顺序不匹配,则返回false

  • 在形状中查找不同的三角形

    所以要么是面积最大,要么是最小,要么是边缘长度,或者其他什么。如果不存在,那么您需要其他独特的功能,如2个最远的点等。。。如果没有人在场,那么您需要RANSAC

    对齐两个网格,使匹配的三角形(或特征点)在两个网格中具有相同的位置

  • 比较匹配顶点

    因此,从网格A中找到离网格B中每个顶点最近的顶点,如果它们之间的距离超过某个阈值,则返回
    false

  • 返回
    true

  • 如果网格对于3没有明显的特征,您需要使用蛮力循环通过所有三角形组合形式A和B,直到#4返回真值或所有测试的组合,或者使用RANSAC

    #3还有一些替代方法,比如找到质心以及与质心最近和最远的点,并将它们用作基础向量,而不是三角形。这就要求单个顶点或一组紧密的顶点是最小值和最大值。如果不是像立方体二十面体、球体等对称网格中那样出现,你就倒霉了

    您可以通过使用网格中的其他功能(如颜色、纹理坐标等)来增强这一点

    [Edit1]只不过是一种不需要对齐的局部方法的疯狂想法

  • 计算平均点
    C

  • 计算以
    C为中心的最大内接球面

    C
    到最近点的距离

  • 计算以
    C为中心的最小外切球体

    C
    到其最远点的距离

  • 比较形状之间的半径

    如果不相等,形状肯定不相同。如果相等,则必须使用上述方法进行检查


  • 要完成@Spektre的回答,如果两个网格不完全相同,即至少有一对节点或边不完全重叠,则可以使用来量化两个网格之间的“差异”

    也许你可以用RANSAC得到一个基本矩阵,然后检查内联线。最好使用精确的确定性算法。我建议删除你问题的最后一行,因为询问库建议是离题的,所以。网格a和B的拓扑相同吗?例如,对于A、C++、VJ和VK的A网格中的任意给定三角形,在网格B中有一个对应的三角形,其中顶点Vi,Vj和Vk,其中Vi,j,k是Vi,j,k的变换顶点。这些数学概念对我来说很深刻。。。