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.
fuente
Respuestas:
Esta es una variante de la cubierta del conjunto geométrico. Dependiendo de la configuración exacta, es posible que pueda hacer una buena aproximación. El problema es, por supuesto, NP-Hard. Los huersitics naturales son usar un algoritmo codicioso (siempre elija el rectángulo / tira que cubra la mayor parte del área aún no cubierta. La técnica alternativa es usar el pesaje de nuevo. Hay algunos resultados teóricos interesantes, pero, francamente, nada que sea demasiado útil en la práctica Una característica interesante que quizás desee probar es descomponer primero su polígono en un número mínimo de formas convexas (utilizando el algoritmo de programación dinámica Keil) y luego cubrir cada polígono convexo por separado ...
fuente
Creo que este documento puede ser de alguna ayuda. Obviamente no es el mismo problema, de hecho es el problema inverso, que cubre un rectángulo con polígonos, pero algunas de las ideas podrían ser un punto de partida. En particular, este problema inverso es NP-hard y sospecho que el suyo también puede serlo (aunque no hay una extensión obvia de la reducción hasta donde puedo decir).
E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell y V. Polishchuk. Escandinavos finos en la parte superior del pastel: en la caja más pequeña de talla única. Diversión con algoritmos . p. 16-27. 2012
fuente