Buscando un algoritmo que no sea de "fuerza bruta" para eliminar las áreas de intersección de una colección de Rectas

Tengo una colección de Rect de tamaño n, la mayoría de las cuales se cruzan entre sí. Me gustaría eliminar las intersecciones y reducir las Rectas que se intersectan en rectos no intersectantes más pequeños.

Podría forzar fácilmente una solución de fuerza bruta, pero estoy buscando un algoritmo eficiente.

Aquí hay una visualización:

Original

Procesada

Idealmente, la firma del método se vería así:

public static List<RectF> resolveIntersection(List<RectF> rects);

la salida sería mayor o igual a la entrada, donde la salida resuelve la representación visual anterior.

Respuestas a la pregunta(6)

Su respuesta a la pregunta