代码之家  ›  专栏  ›  技术社区  ›  zell

给定一个点和大量的四面体,如何有效地确定点在哪一个四面体中

  •  1
  • zell  · 技术社区  · 4 年前

    假设我们将一个点定义为元组

    假设我们有一个四面体和一个点,我们可以确定 How to check whether the point is in the tetrahedron or not? 关键的想法是确定这个点是否在四面体的四个侧面的内侧。

    我的问题。

    1. 我们可以用上面提到的方法逐个检查这些四面体。但这可能太慢了,因为我有大量的四面体。

    2. 在问题设置中有一个特定的点。这些四面体是 从FEM(有限元方法)问题中获得,用于求解 医学影像问题(他们形成了病人的大脑)。也许有限元法本身与这个问题无关,但我们可以利用这样一个事实,即这些四面体是相邻的,并且这些四面体模拟的空间中没有孔洞。

    3. 四面体除了在相邻的边界上没有交集。所以,这个问题应该有一个唯一的解决方案,除非在边界处,在这种情况下,有任何一个相交的四面体都可以作为我问题的答案。

    4. 在输入上没有给出四面体的具体顺序。对于四面体的形状是否规则,目前还没有明确的规定。

    谢谢!

    0 回复  |  直到 4 年前
        1
  •  3
  •   trincot Jakube    4 年前

    你可以先过滤四面体,只保留边界长方体(与X、Y和Z轴平行)包含的四面体 p . 测试速度更快:

    所以找到四面体——有点 t 0 1 ,吨 2 t --对点有以下属性 p :

    • ·p ·t
    • i、 记者:t 是的 是的 ·t j 是的
    • i、 记者:t ·p z ·t j

        2
  •  2
  •   Lesiak    4 年前

    如果你计划在同一组四面体上测试很多点,我肯定会进行一个预处理步骤,为四面体构建空间结构。

    1. 把空间分成相等的盒子 SpaceBoxes ).
    2. SpaceBox ,保留与长方体碰撞的四面体列表。
    • 为了加快速度,我会测试四面体的边界框,而不是四面体本身。
    • 请注意,这一步可以相对便宜地完成-你知道空间盒大小相等,你知道它们的位置,所以给定四面体的边界框,很容易找到候选的空格框。

    待测点 p

    • 找到对应的 O(1)
    • 所有的四面体都和 太空盒
    • 每个四面体的边界框

    注意,测试的性能主要取决于每个空间盒中四面体的数量。

    • 将每条边细分为16个部分可以得到16^3=4096个空格框
    • 如果N=7000000,应该有大约1709个候选四面体来测试

    推荐文章