Algorithm 在长方体中封装体素/数据的算法
我有一个有8个可变角的立方体。我还有一个体素数据集,它的所有尺寸都是相同的 有没有人知道一种算法,在立方体仍然封装所有体素的情况下,找到立方体的最小可能区域(以及所有8个角点位置) 最好是不太重的算法。如果你指的是长方体——一个有6个矩形面的3D形状——如果这些面必须与体素数据的轴对齐,那么这只是(3D)边界框。您只需计算数据集中每个体素的x、y和z坐标的最小值和最大值。对于这3个维度,取所有8个组合的{最小值,最大值}将为您提供8个角的坐标,尽管您通常只记录两个点(最小值x,最小值y,最小值z)和(最大值x,最大值y,最大值z),这两个点完全描述了形状 如果形状必须是立方体(即所有尺寸相等),则必须将两个较小尺寸的大小增加到最大尺寸的大小Algorithm 在长方体中封装体素/数据的算法,algorithm,voxel,Algorithm,Voxel,我有一个有8个可变角的立方体。我还有一个体素数据集,它的所有尺寸都是相同的 有没有人知道一种算法,在立方体仍然封装所有体素的情况下,找到立方体的最小可能区域(以及所有8个角点位置) 最好是不太重的算法。如果你指的是长方体——一个有6个矩形面的3D形状——如果这些面必须与体素数据的轴对齐,那么这只是(3D)边界框。您只需计算数据集中每个体素的x、y和z坐标的最小值和最大值。对于这3个维度,取所有8个组合的{最小值,最大值}将为您提供8个角的坐标,尽管您通常只记录两个点(最小值x,最小值y,最小值z
如果您正在寻找可用于高效相交测试(使用点、线、平面或其他边界体积)的绑定体积的形状,则另一个不错的选择是球体。两个球体之间的相交测试特别简单:你所需要做的就是检查它们中心之间的距离是否超过它们半径的总和。j_random_hacker已经给出了一个很好的答案,长方体与轴对齐,立方体与轴对齐,球体对齐。然而,如果你真的想找到最佳长方体,算法就会变得复杂得多 我假设网格中有一组体素。如果体素表示实体或形成密集云,则可能需要创建一组表示形状外壳的体素。创建凸面外壳(无论是球体还是任何凸面多面体)时,内部体素并不重要 一种可能的方法是:
- 对于沿X轴的每条线,找到具有最小和最大X坐标的元素,并删除它们之间的所有元素
- 对沿Y轴的线和沿Z轴的线重复相同的操作
- 所有点与平面的距离均为非负(即在同一侧)
- 平面上至少有一个点(零距离)
即使这些方法可能有用,但真正的问题是:为什么?可能有比尝试制作小长方体更好的方法。只是为了验证:你真的在谈论一个立方体,即一个有六个正方形面的规则实体吗?在这种情况下,我们有简单的缩放(立方体大小)、平移(立方体位置)和旋转,即六个自由度。另外,是否希望立方体的面积(表面积)或体积尽可能小?(对于立方体来说,这并不重要,但如果你接受其他形状,那么这可能很重要。)我认为不是真正的立方体,更像是具有8个可变角的几何体。一个立方体形状可能也会起作用,而且可能会快得多。不过,对于这个问题,我并不打算采用立方解。我的目标是在封装所有体素的同时获得尽可能小的体积。