Relleno de espacio entre líneas 2D aleatorias


23

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.

ingrese la descripción de la imagen aquí


Actualización 1: Podríamos administrar una solución para el primer caso: los
ingrese la descripción de la imagen aquí
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 mproporciona 10x10 mpara 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.
ingrese la descripción de la imagen aquí
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 mes solo un desperdicio. No habrá un tamaño de bloque mayor que el 1.7x1.7 mdebido a los límites de operación.


3
@RK - No estoy de acuerdo. Él / ella ya ha declarado lo que están buscando muy claramente. Claro que hay múltiples soluciones posibles, pero no hay nada que impida que todas sean útiles y votaron.
GIS-Jonathan

1
Como esta es una pregunta de algoritmo que puede ser bastante matemática, es posible que desee probar - math.stackexchange.com
GIS-Jonathan

1
Muy relacionado: gis.stackexchange.com/questions/27303 . La pregunta actual, como señala @RK, no tiene una respuesta definitiva porque no está suficientemente bien planteada. ¿Cuántos rectángulos están permitidos? ¿Qué significa "maximizar el tamaño"? Tenga en cuenta también que este no es un problema de "mosaico aleatorio": las líneas simplemente determinan, a través de su complemento, las áreas que pueden ser ocupadas; Las soluciones definitivamente no serán aleatorias. Tenga en cuenta también que hay una simplificación fácil disponible de inmediato: el problema se puede resolver por separado dentro de cada componente del complemento.
whuber

1
@whuber: Bueno, una aplicación en la que estamos interesados ​​es encontrar la distribución de bloques de 'roca' intactos extraíbles en una 'mina' muy fracturada. Bueno, creemos que los SIG parecen prometedores para este problema. Agregamos esto a la pregunta también. Suponemos que la comunidad SIG puede beneficiarse de la idea de sus otros problemas particulares relacionados. De todos modos, depende de usted si lo migra;)
Desarrollador

44
Como sugiere @whuber, esta no es realmente una pregunta SIG (aunque no me ofende que se haga aquí). Tendrás mucha mejor suerte al obtener una respuesta en un foro sobre geometría computacional u optimización.
Llaves

Respuestas:


2

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 ...

  1. Utilice "BoundingBoxReplacer" en el área de interés.
  2. Vuelva a proyectarlo en un sistema de coordenadas local (para más adelante cuando necesite "mosaico" en pies / metros).
  3. Proteger las líneas con el transformador "Bufferer". Solo necesita un tamaño arbitrario, digamos .01 pies / metros. Lo que estamos buscando aquí es un polígono de la línea para el siguiente paso.
  4. Agregue un transformador "Tiler". Especifique un tamaño de mosaico grande (estimado o no) en pies o metros. Lo que estamos haciendo aquí es agrupar el área de interés en bloques cuadrados. Dependiendo del conjunto de datos, comience en grande para obtener realmente los valores atípicos grandes.
  5. Agregue un transformador "Clipper". Lo que estamos haciendo aquí es esencialmente dividir el conjunto de datos para ver qué mosaicos son buenos / malos. En la salida, los mosaicos que están "Dentro" son demasiado grandes. Sin embargo, los azulejos que están "Afuera" son lo suficientemente grandes y están listos para cortar ...
  6. Aquí es donde se vuelve complejo, pero no difícil ... Vamos a hacer un bucle del transformador para que reutilicemos el BoundingBox original, pero recortemos las áreas que ya están listas para cortar. Por lo tanto, agregue un clipper y dirija el Clipper como los mosaicos de "Salida" en la salida anterior del clipper. Ahora tenemos un único polígono que está listo para funcionar nuevamente.
  7. Use el mosaico nuevamente, esta vez especificando un mosaico más pequeño. Por ejemplo, si usó fichas de 100 metros antes, intente 90 metros.
  8. Agregue otro clipper, con el clipper de entrada como las líneas almacenadas, y el clippee de entrada como los mosaicos más pequeños como entrada.

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.

Ejemplo de mosaico FME

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.