Если я правильно понимаю ваш вопрос, вы хотите рассчитать объем пересечения между двумя выровненными по оси гиперправителями.
Первый прямоугольник (ваш массив) определяется положением его нижнего угла (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