计算数组和正方形在多个维度上的交点的量的无用的方法

时间:2019-02-23 22:24:40

标签: arrays math geometry computational-geometry

我有一个多维数组,在遍历每个元素时,如果每个元素的尺寸大于3,则我需要计算正方形,立方体或其他各个对象的体积,每个元素的大小为2r。如果我要遍历数组边界附近的元素,则该正方形/立方体的一部分将停留在数组外部-并且我需要数组和对象之间的交集量。

这是二维问题的外观-我需要计算红色区域。

This is how the problem looks in 2D - I need to calculate the red area.

到目前为止,我知道两种方法:

  1. 案例和if语句。对于2D,我可以计算相交角的坐标,但是由于严格来说这不是2D问题,而是多维问题,其中输入,案例和if语句的维数以及随后的硬编码是毫无疑问。
  2. 手动遍历正方形中的每个元素,并检查它是否属于数组。尽管这很容易做到,但是即使在2D模式下,它也非常慢,因为我要遍历n维数组,并且在每次迭代中,我都再次执行n循环,大小为2r ^ n。半径越大,执行速度越慢。

有什么方法可以让我快速计算出这些路口的体积吗?

1 个答案:

答案 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