Estoy tratando de cubrir un polígono cóncavo simple con un mínimo de rectángulos. Mis rectángulos pueden tener cualquier longitud, pero tienen anchuras máximas y el polígono nunca tendrá un ángulo agudo.
Pensé en tratar de descomponer mi polígono cóncavo en triángulos que produjeran un conjunto de rectángulos mínimamente superpuestos que limitaran mínimamente cada triángulo y luego fusionaran esos rectángulos en otros más grandes. Sin embargo, no creo que esto funcione para pequeñas muescas en los bordes del polígono. Los triángulos creados por los vértices reflejos en esas muescas crearán los rectángulos incorrectos. Estoy buscando rectángulos que abarquen / ignoren las muescas.
Realmente no sé nada sobre geometría computacional, por lo que no estoy muy seguro de cómo comenzar a hacer la pregunta.
Encontré otras publicaciones que eran similares, pero no las que necesitaba:
- dividir el polígono en una cantidad mínima de rectángulos y triángulos
- Cubriendo un polígono arbitrario con un número mínimo de cuadrados
- Encuentra rectángulos para que cubran la cantidad máxima de puntos
- Algoritmo para encontrar la menor cantidad de rectángulos para cubrir un conjunto de rectángulos
Algunos ejemplos: el negro es la entrada. El rojo es el resultado aceptable.
Otro ejemplo: se prefiere la segunda salida. Sin embargo, generar ambos resultados y usar otro factor para determinar la preferencia es probablemente necesario y no es responsabilidad de este algoritmo.
Los polígonos que imitan curvas son extremadamente raros. En este escenario, gran parte del área de los rectángulos se desperdicia. Sin embargo, esto es aceptable porque cada rectángulo obedece a la restricción de ancho máximo.
Además, este artículo me pareció cercano a lo que necesito:
- Cubriendo con piezas rectangulares de Paul Iacob, Daniela Marinescu y Cristina Luca
Quizás una mejor pregunta es "¿Cómo puedo identificar porciones rectangulares de un polígono cóncavo?"
Aquí hay una imagen que muestra la implementación deseada:
El verde es el uso real del material. Los rectángulos rojos son los diseños. El azul es el MBR de todo el polígono. Estoy pensando que debería tratar de obtener pequeños MBR y completarlos. Los 2-3 rectángulos verdes en la esquina superior izquierda que terminan en el medio del polígono son caros. Eso es lo que quiero minimizar. Los rectángulos verdes tienen un ancho y alto mínimo y máximo, pero puedo usar tantas filas y columnas necesarias para cubrir una región. Nuevamente, debo minimizar la cantidad de rectángulos que no se extienden a través de la entrada. También puedo modificar la forma del rectángulo verde para que quepa en lugares pequeños que también es muy costoso. En otras palabras, es ideal obtener tantos rectángulos como sea posible para abarcar tanto como sea posible.