【问题标题】:Mapping points of the a solid box to a tetrahedral meshed box将实体盒的点映射到四面体网格盒
【发布时间】:2014-03-13 14:44:33
【问题描述】:

给定一个带有点的 3d 实体框。给定一个用四面体网格划分的盒子。两个盒子的尺寸是一样的。

我需要找到一种算法,将实体的点映射到网格中的相应四面体。

我使用了下一个算法:

  1. 使用八叉树优化实体
  2. 遍历网格中的四面体并检查它是否与八叉树的分支或叶子相交。 (Ratschek & Rockne 算法)
  3. 如果相交,将点从八叉树映射到四面体。

但是算法很慢,而且我在检查盒子和四面体之间的交点时遇到了很大的问题。

我仍然可以坚持使用八叉树,但我肯定需要一些合理的东西来检查交叉点。任何评论都将受到高度赞赏。

更新:我有 200 万个实心点和 20 万个四面体

更新 2:我正在尝试在三角测量中实现步行

【问题讨论】:

    标签: algorithm graphics mapping computational-geometry tetrahedra


    【解决方案1】:

    一个标准的简化是首先使用轴对齐的边界框计算近似的八叉树-四面体交叉点。由此产生的相交测试非常简单。

    然后,一旦您遍历到树的叶层,您就可以使用精确测试来确定给定四面体中包含哪些点。

    总结一下:

    Form an octree T for your points X
    
    for (all tetrahedrons ti in mesh M)
    
        Form a minimal axis-aligned bounding-box Bi for tetrahedron ti
    
        Traverse T from root, accumulating a list Li of all leaf nodes 
        that overlap with box Bi
    
        for (all leaf nodes li in list L)
            for (all points pi in leaf node li)
    
                if (point pi is inside tetrahedron ti /*exact test*/ )
                    Associate point pi with tetrahedron ti
                endif
    
            endfor
        endfor
    
    endfor
    

    如果满足以下条件,则该算法是有效的:(i)X 在网格 M 内分布良好,并且(ii) M 中的四面体具有合理的纵横比。

    实现良好性能的关键是确保尽可能高效地执行树遍历步骤。

    可以通过检查给定点 pi 是否位于四面体 4 个面的“内”侧来完成四面体点测试。给定一个四面体[i,j,k,l],如果点pi 与“相对”顶点l 位于平面[i,j,k] 的同一侧,则它位于面[i,j,k] 的“内”侧。

    可以使用自适应精度算法稳健地执行这些方向测试。 Jonathan Shewchuk 提供了这样的实现 here

    【讨论】:

      【解决方案2】:

      假设您知道四面体的顶点,您可以检查一个点是否在四面体内部,方法是检查它是否位于其每个平面的leftrightside,比如左边是指向的那一侧沿着正常。

      确定一个点在平面左侧还是右侧的数学公式是straight forward

      我发现了另一个method,但看起来像是我的答案的变体。

      当然,如果一个点在 tet 内,它会被映射到 tet。该方法可以实现为顶点着色器或 OpenCL/CUDA 内核,这将使其高度并行。

      【讨论】:

        猜你喜欢
        • 2016-12-21
        • 2018-02-10
        • 1970-01-01
        • 2015-07-13
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多