Arrays 计算多维数组和正方形交集体积的无壳方法
我有一个多维数组,在遍历它的每个元素时,我需要计算正方形、立方体或其他相应对象的体积,如果维度大于3,则每个元素的大小为2r。如果我在数组边界附近的元素中迭代,那么这个正方形/立方体的一部分会粘在数组之外——我需要数组和对象之间的交集的体积 这就是问题在2D中的表现-我需要计算红色区域 到目前为止,我知道两种方法:Arrays 计算多维数组和正方形交集体积的无壳方法,arrays,math,geometry,computational-geometry,Arrays,Math,Geometry,Computational Geometry,我有一个多维数组,在遍历它的每个元素时,我需要计算正方形、立方体或其他相应对象的体积,如果维度大于3,则每个元素的大小为2r。如果我在数组边界附近的元素中迭代,那么这个正方形/立方体的一部分会粘在数组之外——我需要数组和对象之间的交集的体积 这就是问题在2D中的表现-我需要计算红色区域 到目前为止,我知道两种方法: 案例和if语句。对于2D,我可以计算交叉点角点的坐标,但因为这不是严格意义上的2D问题,而是多维问题,输入时给出了维度的数量,案例和if语句以及后续的硬编码都是毫无疑问的 手动遍历
有什么方法可以让我快速计算这些交叉口的交通量吗?如果我正确理解您的问题,您希望计算两个轴对齐的超矩形之间的交叉口交通量 第一个矩形(数组)由其下角的位置(
arrayLower
,一个nD向量)及其大小(arraySize
,再次是nD向量)定义。第二个矩形由其中心(p
,nD向量)和每个方向上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
如果我正确理解了您的问题,您需要计算两个轴对齐的超矩形之间的交点体积 第一个矩形(数组)由其下角的位置(
arrayLower
,一个nD向量)及其大小(arraySize
,再次是nD向量)定义。第二个矩形由其中心(p
,nD向量)和每个方向上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
谢谢,这很好用,但是有没有类似的方法来做同样的事情,但是用半径为r的球体而不是矩形?很明显,它是一个超矩形(数组)和一个n-球体之间的交集。球体-矩形交集要复杂得多,因为有很多特殊情况。我建议问一个新问题——可能是关于。谢谢,这很有效,但是否也有类似的方法来做同样的事情,只是用半径为r的球体而不是矩形?很明显,它是一个超矩形(数组)和一个n-球体之间的交集。球体-矩形交集要复杂得多,因为有很多特殊情况。我建议为此提出一个新问题——可能是关于。