我有一个多维数组,在遍历每个元素时,如果每个元素的尺寸大于3,则我需要计算正方形,立方体或其他各个对象的体积,每个元素的大小为2r。如果我要遍历数组边界附近的元素,则该正方形/立方体的一部分将停留在数组外部-并且我需要数组和对象之间的交集量。
这是二维问题的外观-我需要计算红色区域。
到目前为止,我知道两种方法:
有什么方法可以让我快速计算出这些路口的体积吗?
答案 0 :(得分:2)
如果我正确理解了您的问题,则要计算两个轴对齐的超矩形之间的交点量。
第一个矩形(数组)由其下角的位置(arrayLower
,nD向量)及其大小(arraySize
,又是nD向量)定义。第二个矩形由其中心(nD向量p
和每个方向上r
个单位的范围)定义。
对于给定的维度d
,这可以通过非常结构化的方式完成,因为您只需要在每个维度上扩展范围即可。
volume = 1
for each d:
lower = max(p[d] - r, arrayLower[d])
upper = min(p[d] + r, arrayLower[d] + arraySize[d])
if(lower > upper)
volume = 0 //no intersection
else
volume *= upper - lower