static Rect randomRect_enclosing_in(int w, int h, Rect inner, Rect outer) { if (inner.w > w || inner.h > h) null; if (outer.w < w || outer.h < h) null; IntRange x1range = intersectIntRanges( intRange_incl(inner.x2()-w, inner.x), intRange_incl(outer.x1(), outer.x2()-w)); IntRange x2range = intersectIntRanges( intRange_incl(inner.x2(), inner.x+w), intRange_incl(outer.x1()+w, outer.x2())); if (x1range.isEmpty() || x2range.isEmpty()) null; IntRange y1range = intersectIntRanges( intRange_incl(inner.y2()-h, inner.y), intRange_incl(outer.y1(), outer.y2()-h)); IntRange y2range = intersectIntRanges( intRange_incl(inner.y2(), inner.y+h), intRange_incl(outer.y1()+h, outer.y2())); if (y1range.isEmpty() || y2range.isEmpty()) null; ret rectFromPoints(random(x1range), random(y1range), random(x2range), random(x2range)); }