【问题标题】:Representing a convex hull in higher dimensions (3+)表示更高维度的凸包 (3+)
【发布时间】:2012-11-12 10:08:29
【问题描述】:

在 2d 中,凸包基本上表示为点之旅。似乎这种表示可能会超出二维。因为,我很快就会和他们一起工作,我想提前知道这样做的“标准”是什么,如果有这样做的话,因为船体可能会被其他人使用。

澄清: 我所指的标准是关于输出格式的,这样程序就可以从该输出中利用外壳做其他事情。

【问题讨论】:

    标签: 3d convex-hull convex-polygon


    【解决方案1】:

    点的集合总是足以完全指定任何船体,但在实践中计算点的连通性通常需要再次运行船体算法。

    编辑:如果您需要边缘或面部数据,您可以在 quickhull 等算法中免费获得。我将假设 N 维。基本上,人们不断地寻找由 N 个点定义的平面,以及相关的法向量。如果法向量给定的平面一侧仍有点,则创建由最远点定义的新平面,并删除新平面集错误一侧的任何点。这些平面定义了 (N-1) 个单元(在 3D 中这些是面,在 2D 中这些是边)并在算法中的这一点上给出船体的最高维度表示。该算法继续进行,直到没有平面的点位于错误的一侧。最后的平面给出了最终船体的 (N-1) 个单元,它们的定义点是顶点。有一个关于可以由 N 个以上的点定义的平面的问题,但是有很多方法可以处理它们,请参阅http://www.qhull.org/ 使用多种策略,其中最明显的是使用 Delaunay 三角剖分(一旦你有一个凸包算法,你就有了代码)。

    在二维中,您有一个点列表和一些边。如果你愿意,你可以命令他们参观。任何船体都需要边和点。

    在 3D 中,您需要点和边,或面和边,或点和面作为最小表示。但有时同时拥有这三个可能是有效的。也许你想用它们构成的边缘来表示面部,也许是点,也许两者兼而有之。这是内存和时间或可访问性之间的权衡。

    在更高维度上你也有同样的东西,但有单元格(3D+ 面)以及面、边和点。随着维度的增加,存储单元数据所需的空间可能会变得非常大,因此点和边的集合可能会变得可取,您可以在此处看到这种模式的证据:http://en.wikipedia.org/wiki/Hypercube#Elements

    然后您可以选择如何表示高维单元格,它们参考点、边、面、低维单元格、高维单元格。问题是:你跟踪不同维度细胞之间的每一个关系(比如面和边缘之间的关系,但更高维度)?或者这些关系的类型数量将超线性增加,这是一个额外的组合,每种类型的数量关系也将被表示。因此,您是否将其全部扔掉并即时计算。即使是中等规模的问题,对空间和时间的要求也会变得很重要 - 所以表示的选择实际上取决于你在做什么。

    就我个人而言,我通常使用一组带有参考它们的边的点。

    ND 几何:http://en.wikipedia.org/wiki/Polytope

    【讨论】:

    • 虽然您所说的很有帮助,但我实际上更想知道如何确定边缘和面在空间中的位置。我可能应该提到将使用笛卡尔坐标。这些点是直截了当的坐标。我不确定,但我想我可以跟踪构成空间的 n 立方体的点,以及每个面上的点在哪里。虽然不确定这是否足以建造船体。
    • 算法不是标准的,所以问题是输出是否可以用于创建船体。我会尽快更新我的帖子,以反映我目前正在使用的内容,看看是否足够。
    • @MC 所以我现在更好地理解了你的问题。看看QHull的输出形式吧?
    • 这就是我一直在寻找的,因此我只添加了一个说明。我会查看 quickhull 的输出,看看是否能解决问题。
    猜你喜欢
    • 2013-06-05
    • 2015-03-09
    • 2013-08-27
    • 2013-12-29
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多