如何计算多个重叠平行六面体的总体积?

时间:2015-01-26 07:43:31

标签: algorithm computational-geometry

我们在太空中有许多平行六面体,所有边都平行于轴。每个平行六面体的特征在于6个整数值,即其两个顶点的坐标

(x1; y1; z1); (x2; y2; z2) with x1 < x2; y1 < y2 and z1 < z2; 

我必须找到两个或多个平行六面体同时占用的总体积。

1 个答案:

答案 0 :(得分:2)

让我们首先考虑对所有长方体的体积求和,同时只考虑重叠区域一次。

您可以使用由所有长方体的起点和终点组成的新网格覆盖您的空间。然后,您可以根据该网格有效地将所有长方体切割成子长方体,如下所示(对于矩形):

sub-grid forming sub-rectangles

例如,图像中的右下方矩形由六个不相交的子矩形组成,其体积可以单独计算。

所以:

  • 对于每个轴,构建一个包含长方体的起点和终点的数组。对数组进行排序。
  • 创建一个三维数组,其长度对应于每个轴的坐标数组的长度。此数组保存新网格中是否占用长方体的信息。
  • 现在迭代长方体,并在网格中标记构成长方体的所有子长方体。
  • 迭代标记数组并对所有标记的长方体的体积求和。

当您想要获得重叠子长方体的体积时,您可以构建一个长方体交叉点列表并对其进行处理,或者您可以将标记数组设为一个计数数组,并仅对其计数的子卷求和至少是2。

上述方法适用于任意坐标值,甚至是浮点数。如果您的长方体仅限于小范围内的整数,则可以不使用新网格,只需使用自然整数网格作为&#34;体素&#34;。