Esto no es una pregunta para la tarea :)¿Cuál es la mejor manera de combinar un conjunto de rectángulos en una imagen?
Tengo un conjunto de rectángulos dispersos en una imagen. Quiero fusionar (crear una unión) de cada grupo de rectángulos intersecados. Si un rectángulo no se cruza con sus vecinos, permanece intacto.
El problema es que los rectángulos combinados pueden intersectar rectángulos que anteriormente no estaban en consideración; Los rectángulos fusionados también pueden intersectar rectángulos recién fusionados. Quiero atrapar esos casos.
Por lo tanto, en mi opinión, debe ser iterativo (pruebe cada rect contra cada otro rect en el conjunto) y recursivo (pruebe cada rect fusionada contra el conjunto de nuevo, incluidas las rectas fusionadas).
¿Cómo puedo hacer esto? Estoy trabajando en Java, pero esto es más una cuestión algorítmica que una orientada al lenguaje.
Gracias!
Editar: se agregó el código relevante para ilustrar mejor la mala forma en que lo estoy manejando ahora.
public static List<BinaryRegion> mergeRegions(List<BinaryRegion> regions)
{
List<BinaryRegion> merged = new ArrayList<BinaryRegion>();
geoModel = new GeometryFactory();
Polygon polys[] = new Polygon[regions.size()];
for (int i = 0; i < regions.size(); i++)
{
Polygon p = convertRectangleToPolygon(regions.get(i)
.getBoundingBox());
polys[i] = p;
}
System.out.println("Converted " + regions.size() + " polys");
for (int i = 0; i < regions.size(); i++)
{
System.out.println("Sending in poly " + i);
ArrayList<Polygon> result = mergePoly(polys[i], polys);
System.out.println("After run, size=" + result.size());
}
return merged;
}
private static ArrayList<Polygon> mergePoly(Polygon p, Polygon[] polys)
{
ArrayList<Polygon> merges = new ArrayList<Polygon>();
for (int i = 0; i < polys.length; i++)
{
if (p.equals(polys[i]))
System.out.println("found the exact match at " + i);
else if (p.intersects(polys[i]))
{
System.out.println("Found intersection at " + i);
System.out.println("Other poly is area "+polys[i].getArea());
Polygon u = (Polygon) p.union(polys[i]);
System.out.println("Merge size="+u.getArea());
merges.add(u);
}
else
merges.add(polys[i]);
}
return merges;
}
Es obvio que esta no es una pregunta para la tarea :) – dasblinkenlight
¿Cuántos rectángulos tienes? Decenas? Cientos? Millones? .. – dasblinkenlight
Al "crear una unión" ¿quiere decir "crear un rectángulo que cubra ambos rectángulos que se intersectan", o "crear una forma que se parece a una unión geométrica de los dos rectángulos que se intersectan"? – dasblinkenlight