function intersections(c, cubes) {
const ics = [];
const intersect = (c1, c2) =>
c1.xMax < c2.xMin ||
c1.xMin > c2.xMax ||
c1.yMax < c2.yMin ||
c1.yMin > c2.yMax ||
c1.zMax < c2.zMin ||
c1.zMin > c2.zMax
? null
: {
lit: c2.lit,
xMin: Math.max(c1.xMin, c2.xMin),
xMax: Math.min(c1.xMax, c2.xMax),
yMin: Math.max(c1.yMin, c2.yMin),
yMax: Math.min(c1.yMax, c2.yMax),
zMin: Math.max(c1.zMin, c2.zMin),
zMax: Math.min(c1.zMax, c2.zMax)
};
for (const cube of cubes) {
const ic = intersect(c, cube);
if (ic) {
ics.push(ic);
}
}
return ics;
}