public Tuple <BoundingBox, BoundingBox> Split()
        {
            (var dx, var dy, var dz) = Size();

            var greatest = Shape.Max(dx, dy, dz);

            (var x0, var y0, var z0, _) = Minimum.ToTuple();
            (var x1, var y1, var z1, _) = Maximum.ToTuple();

            if (greatest == dx)
            {
                x0 = x1 = x0 + dx / 2.0;
            }
            else if (greatest == dy)
            {
                y0 = y1 = y0 + dy / 2.0;
            }
            else
            {
                z0 = z1 = z0 + dz / 2.0;
            }

            var midMin = pt.Point(x0, y0, z0);
            var midMax = pt.Point(x1, y1, z1);

            var left  = new BoundingBox(Minimum, midMax);
            var right = new BoundingBox(midMin, Maximum);

            return(new Tuple <BoundingBox, BoundingBox>(left, right));
        }