Considere una región (2D) llena de líneas al azar (figura siguiente). Estamos interesados en llenar los espacios vacíos entre líneas que incluyen cuatro bordes de límite de una manera:
0- maximizando el tamaño de las parcelas;
1- la forma de las parcelas de relleno es cuadrada alineada horizontal o verticalmente;
2- la forma de las parcelas de relleno es cuadrada, es decir, alineación relajada ;
3- forma de rellenar paquetes es cualquier cuadrángulo nuestra pregunta original
Entonces, por ahora, hay tres escenarios diferentes.
Tenga en cuenta que las líneas son del [x1,y1,x2,y2]
conjunto de puntos de forma , números reales.
[* * *] Las ideas de posibles soluciones / algoritmos / fragmentos de código / etc. son más que bienvenidas.
Actualización 1: Podríamos administrar una solución para el primer caso: los
pasos son:
1- líneas
2- líneas de rasterización en un mapa de bits
3- búsqueda de celdas cercanas para cada celda del color deseado (es decir, el mismo color) con una función objetivo para maximizar el área, es decir, el número de celdas.
Funciona bien, sin embargo, cubre solo el primer escenario y también es lento.
Actualización 2:
asumimos que el lector está familiarizado con el concepto de mosaico de relleno de espacios. Puedes seguir el enlace para inspirarte. Sin embargo, tenga en cuenta que nuestro problema es diferente. Como no llenamos el espacio vacío al azar y no elegimos el tamaño al azar. La solución debe ser iterativa. Para todos los casos, no hay límite en el número de paquetes que se están instalando. De hecho, depende del usuario limitar el número de iteraciones, eligiendo un área mínima para parcelas, por ejemplo. Esto es obvio en el ejemplo anterior en el que discretizamos líneas en píxeles con un tamaño especificado. Es decir, el procedimiento debe ejecutarse hasta que se llene toda el área vacía respetando el criterio, por ejemplo, el área máxima de parcelas.
Actualización 3:
resumen:
una aplicación es encontrar la distribución de bloques de 'roca' intactos extraíbles en una 'mina' muy fracturada. Esto podría ser muy útil para muchos aspectos, incluido el diseño de perforación, la evaluación financiera, etc.
Descripción:
para una mina de roca decorativa (piedra), los productos que son los bloques de rocas intactas cortadas como cubos rectangulares, el precio depende estrechamente del tamaño del bloquear. Se deseará extraer un bloque de un área adecuada, es decir, sin fractura mayor, si la cantidad de partes restantes es lo más pequeña posible. Por lo general, los pequeños trozos de rocas no tienen un valor económico relativamente y se consideran residuos.
La pregunta en esta publicación investiga soluciones para este tipo de problema.
Una vista matemática para el problema se puede establecer de la siguiente manera:
2D: Encuentre todos los rectángulos que podrían extraerse de una región 2D dada con algunas líneas optimizadas para un mayor tamaño de rectángulo posible.
3D: encuentre todos los cubos rectangulares que podrían extraerse de una región 3D dada con algunos subplanos (mejor: polígonos) optimizados para un mayor tamaño de bloque posible.
Dado que esto es parte de una investigación en curso, algunas de las preguntas formuladas en los comentarios a continuación no tienen ciertas respuestas que podamos proporcionar. Creemos que la información proporcionada aquí hasta ahora es suficiente para tener una idea general del problema. Sin embargo, proporcionamos algunos detalles como podemos para los beneficios de la comunidad.
Puede poner algunas restricciones en la solución para la última pregunta, aunque creemos que siempre es posible agregar más más tarde. Por ejemplo, siga estos: {Caso 2D}
El mejor tamaño de un bloque (rectángulo económicamente óptimo) que se extraerá en las condiciones mencionadas anteriormente, se 1x1 m
proporciona 10x10 m
para la región en el ejemplo. Esta es una restricción definida en función del valor económico. El tamaño mínimo viable para cortar, etc., sea0.15x0.15 m
; así que este es el segundo límite de tamaño.
La figura anterior muestra la función de valor económico según el tamaño del bloque. Entonces, para este caso en particular, cada pieza de roca más pequeña 0.15x0.15 m
es solo un desperdicio. No habrá un tamaño de bloque mayor que el 1.7x1.7 m
debido a los límites de operación.
Respuestas:
Tengo una idea de cómo trabajas iterativamente desde bloques grandes hasta bloques más pequeños usando FME (por Safe Software). Para el registro, no trabajo para ellos, pero parece alabar su herramienta lo suficiente ...
Enjuague y repita tantas veces como sea necesario usando baldosas más pequeñas cada vez. He adjuntado el inicio de un banco de trabajo que usaría como un enfoque.
Según su descripción (bien detallada), por ahora solo funcionará con su opción 1. Sin dedicar demasiado tiempo todavía.
De todos modos, este es solo un enfoque con el que comenzaría al menos para filtrar el trigo de la paja.
fuente