Considere uma região (2D) preenchida com linhas aleatoriamente (figura a seguir). Estamos interessados em preencher os espaços vazios entre as linhas, incluindo quatro arestas de contorno de uma maneira:
0- maximizar o tamanho das parcelas;
1- a forma das parcelas de enchimento é alinhada quadrada horizontal ou verticalmente;
2- a forma das parcelas de enchimento é quadrada, ou seja, alinhamento relaxado ;
3- forma de encomendas de enchimento é qualquer quadrângulo. nossa pergunta original
Então, por enquanto, existem três cenários diferentes.
Observe que as linhas são do [x1,y1,x2,y2]
conjunto de pontos do formulário , números reais.
[* * *] Ideias de possíveis soluções / algoritmos / trechos de código / etc são bem-vindas.
Atualização 1: Poderíamos gerenciar uma solução para o primeiro caso: As
etapas são:
1 - linhas
2 - rasterizar linhas em um bitmap
3 - pesquisar nas células próximas por cada célula da cor desejada (ou seja, a mesma cor) com uma função objetiva para maximizar a área, ou seja, o número de células.
Funciona bem, mas abrange apenas o primeiro cenário e também é lento.
Atualização 2:
Assumimos que o leitor esteja familiarizado com o conceito de preenchimento de espaço em mosaico. Você pode seguir o link para obter inspiração. No entanto, observe que nosso problema é diferente. Como não preenchemos o espaço vazio aleatoriamente e não escolhemos o tamanho aleatoriamente. A solução deve ser iterativa. Para todos os casos, não há limite para o número de parcelas sendo montadas. De fato, cabe ao usuário limitar o número da iteração, escolhendo uma área mínima para parcelas, por exemplo. Isso é óbvio no exemplo dado acima, no qual discretizamos as linhas em pixels com tamanho especificado. Ou seja, o procedimento deve ser executado até que toda a área vazia seja preenchida, respeitando o critério, por exemplo, a área máxima de parcelas.
Atualização 3:
resumo:
Uma aplicação é descobrir a distribuição de blocos de 'rocha' intactáveis extraíveis em uma 'mina' fortemente fraturada. Isso pode ser muito útil para muitos aspectos, incluindo projeto de perfuração, avaliação financeira etc.
descrição:
Para uma mina de rocha decorativa (pedra), os produtos que são blocos de rochas intactas cortam como cubos retangulares, o preço depende intimamente do tamanho da rocha. quadra. A extração de um bloco de uma área adequada, ou seja, sem fraturas graves, será desejada se a quantidade de peças restantes for a menor possível. Geralmente, os pequenos pedaços de rochas não têm valor econômico relativamente e são considerados resíduos.
A pergunta neste post investiga soluções para esse tipo de problema.
Uma visão matemática do problema pode ser definida da seguinte forma:
2D: encontre todos os retângulos que podem ser extraídos de uma determinada região 2D com algumas linhas otimizadas para um tamanho maior de retângulo possível.
3D: encontre todos os cubos retangulares que podem ser extraídos de uma determinada região 3D com alguns subplanos (melhor: polígonos) otimizados para o maior tamanho de bloco possível.
Como isso faz parte de uma pesquisa em andamento, algumas das perguntas feitas nos comentários abaixo não têm certas respostas que podemos fornecer. Acreditamos que as informações fornecidas aqui até agora são realmente suficientes para obter uma visão geral do problema. No entanto, fornecemos alguns detalhes para benefícios da comunidade.
Você pode colocar algumas restrições na solução da pergunta final, embora acreditemos que seja sempre possível adicionar mais tarde. Por exemplo, siga estes itens: {2D case}
O melhor tamanho de um bloco (retângulo economicamente ideal) a ser extraído nas condições mencionadas acima é 1x1 m
fornecido 10x10 m
para a região no exemplo. Essa é uma restrição definida com base no valor econômico. O tamanho mínimo praticável para cortar etc, seja0.15x0.15 m
; então esse é o segundo limite de tamanho.
A figura acima mostra a função de valor econômico, dependendo do tamanho do bloco. Portanto, neste caso em particular, cada pedaço de pedra menor que 0.15x0.15 m
é apenas desperdício. Não haverá tamanho de bloco maior do que 1.7x1.7 m
devido aos limites de operação.
Respostas:
Eu tenho uma ideia de como você trabalha iterativamente de blocos grandes para blocos menores usando o FME (da Safe Software). Para o registro, eu não trabalho para eles, mas pareço elogiar sua ferramenta o suficiente ...
Enxágue e repita quantas vezes forem necessárias, usando peças menores a cada vez. Anexei o início de uma bancada de trabalho que usaria como uma abordagem.
Com base na sua descrição (bem detalhada), ele funcionará apenas com a sua opção 1 por enquanto. Sem dedicar muito tempo ainda.
De qualquer forma, essa é apenas uma abordagem com a qual eu começaria a filtrar o joio pelo menos.
fonte