查找由平面包围的体积面
Finding faces of volume enclosed by planes
最终,我想实现一个具有以下规范的算法:
输入: N 3 维平面(Ax + By + Cz = 每个平面给出的 D)
输出:
- 顶点列表 V,并且
- 边的列表 E(来自 V 的对),以及
- 面的列表 F(来自 E 的循环)精确地限制了封闭的体积(即,在法线)由 N 平面
不能保证每个平面都与一个面重合,但可以保证体积始终明确存在(即平面具有良好的法线)。
我知道这属于计算几何领域,但我已经尝试使用谷歌搜索上面的一些术语,但没有找到任何内容。我认为一个解决方案应该包括一个二进制 space 分区树。
到目前为止,我已经尝试了天真的方法 - 只是制作了一个巨大的 N^2 (ish) 列表,其中包含平面之间的所有切片,然后针对每个平面检查每个切片,并删除错误的切片至少一个平面的一侧。这是 N^3,当然效率低下,它甚至还没有给出边——你仍然需要计算边的起点和终点在切片上的位置。
任何指向 CG 算法的帮助都会很棒!谢谢!
由于 Preparata and Muller, 1979,有一个复杂度为 O(n log n) 的算法。它使用极性对偶性和高效的 3D 凸包算法。我确定存在它的实现(可能是 qhull?)。
最终,我想实现一个具有以下规范的算法:
输入: N 3 维平面(Ax + By + Cz = 每个平面给出的 D)
输出:
- 顶点列表 V,并且
- 边的列表 E(来自 V 的对),以及
- 面的列表 F(来自 E 的循环)精确地限制了封闭的体积(即,在法线)由 N 平面
不能保证每个平面都与一个面重合,但可以保证体积始终明确存在(即平面具有良好的法线)。
我知道这属于计算几何领域,但我已经尝试使用谷歌搜索上面的一些术语,但没有找到任何内容。我认为一个解决方案应该包括一个二进制 space 分区树。
到目前为止,我已经尝试了天真的方法 - 只是制作了一个巨大的 N^2 (ish) 列表,其中包含平面之间的所有切片,然后针对每个平面检查每个切片,并删除错误的切片至少一个平面的一侧。这是 N^3,当然效率低下,它甚至还没有给出边——你仍然需要计算边的起点和终点在切片上的位置。
任何指向 CG 算法的帮助都会很棒!谢谢!
由于 Preparata and Muller, 1979,有一个复杂度为 O(n log n) 的算法。它使用极性对偶性和高效的 3D 凸包算法。我确定存在它的实现(可能是 qhull?)。