Баунд Боксы — пересечение

Небольшая функция позволяет узнать наличие пересечений между двумя баунд боксами, каждый из которых определяется как точка Max и точка Min.
Сначала по каждой из осей проверяем возможно ли пересечение в принципе. 
Потом, если по одной из осей есть пересечение — определяем другие пересечения.

public bool BoundingBoxIntersetion(PointXYZ minBound, PointXYZ maxBound, PointXYZ minVol, PointXYZ maxVol)
    {
        //NoIntersectionBy Max
        if (maxBound.Y <= minVol.Y) return false;
        if (maxBound.X <= minVol.X) return false;
        if (maxBound.Z <= minVol.Z) return false;
        //NoIntersectioBy Min
        if (minBound.X >= maxVol.X) return false;
        if (minBound.Y >= maxVol.Y) return false;
        if (minBound.Z >= maxVol.Z) return false;

        //IntersectionBy X
        if ( (minBound.X < minVol.X && maxBound.X < maxVol.X) ||
             (minBound.X >= minVol.X && maxBound.X > maxVol.X))
        {
            if (minBound.Y < maxVol.Y &&
                 maxBound.Y > minVol.Y &&
                 minBound.Z < maxVol.Z &&
                 maxBound.Z > minVol.Z) { return true; }
            return false;
        }

        //IntersectionBy Y
        if ( (minBound.Y <  minVol.Y && maxBound.Y < maxVol.Y) || 
             (minBound.Y >= minVol.Y && maxBound.Y > maxVol.Y) )
        {
            if ( minBound.X < maxVol.X &&
                 maxBound.X > minVol.X &&
                 minBound.Z < maxVol.Z &&
                 maxBound.Z > minVol.Z ) { return true; }
            return false;
        }

        //IntersectionBy Z
        if ( (minBound.Z < minVol.Z && maxBound.Z < maxVol.Z)||
             (minBound.Z >=minVol.Z && maxBound.Z > maxVol.Z))
        {
            if ( minBound.X < maxVol.X &&
                 maxBound.X > minVol.X &&
                 minBound.Y < maxVol.Y &&
                 maxBound.Y > minVol.Y) { return true; }
            return false;
        }
        return false;
    }