2.2 Algoritmos para o cálculo dos no-fit-polygons
2.2.2 Algoritmos baseados na soma de Minkowski
Soma de Minkowski A soma de Minkowski obtém-se somando todos os pares de pontos de
dois conjuntos (polígonos). A sua definição formal é a seguinte:
AMB= a + b|a ∈ A, b ∈ B
Por exemplo, a soma de Minkowski dos polígonos A(0, 1), (1, 0), (0, −1) e B(0, 0), (1, 1), (1, −1)
seria AL
B(1, 0), (2, 1), (2, −1), (0, 1), (1, 2), (1, 0), (0, −1), (1, 0), (1, −2) (ver figura 2.12). Note- se que o ponto (1,0) não pertence ao contorno da soma de Minkowski (assinalado a vermelho). Isto porque não são considerados os pontos que se encontram dentro do seu contorno exterior. No caso
da soma de polígonos convexos, estes limites coincidem com o invólucro convexo (convex hull)1
dos pontos resultantes, sendo fáceis de obter; tal já não acontece quando os polígonos possuem concavidades e buracos.
Figura 2.12: Soma de Minkowski entre os polígonos A e B. [Wik12a]
O NFP para dois polígonos A e B é AL
−B, isto é, A mais o simétrico de B em relação à origem (figura 2.13). Esta relação foi enunciada por Stoyan e Ponomarenko [Sto77].
1o invólucro convexo de um conjunto de pontos X é o subconjunto mínimo desses pontos que contém X. Esse
Figura 2.13: NFPAB: soma de Minkowski entre os polígonos A e -B. [Mar09]
Soma de Minkowski com diagrama de declives Nas situações em que pelo menos um dos
polígonos for côncavo, é necessário usar um procedimento diferente para obter o NFP. Ghosh [Gho91] opta por construir um diagrama de declives com as arestas de ambos os polígonos.
Se ambos os polígonos forem convexos, o diagrama de declives mantém a sequência de arestas de cada um. O NFP obtém-se percorrendo o diagrama numa direção qualquer (assume-se que o sentido anti-horário é positivo) e adicionando as arestas encontradas.
Se, por outro lado, um dos polígonos for côncavo, as arestas do polígono côncavo, se percor- ridas na sequência em que se encontram no polígono, não estarão ordenadas por declive, devido à concavidade.
Por este motivo, as arestas do segundo polígono B (convexo) que, no diagrama de declives, se encontrarem entre as arestas de A que formam a concavidade, repetir-se-ão na construcção do NFP de cada vez que, ao percorrer a concavidade, se passar por elas. Quando se atravessam no sentido positivo (entrar na concavidade), adicionam-se ao NFP com sinal positivo, quando se atravessam no sentido negativo (sair da concavidade) adicionam-se ao NFP com sinal negativo (figura 2.14).
Este método é eficaz a encontrar os NFP para todos os pares de polígonos côncavos ou conve- xos, desde que, no caso de serem ambos côncavos, não haja interação entre as duas concavidades pois existirão áreas do diagrama de declives em que nenhumas das arestas de nenhum dos polígo- nos estarão ordenadas por declive.
Soma de Minkowski com um perímetro convexo A proposta de Bennell et al [BDD01] para
resolver as limitações do algoritmo de Gosh quando duas concavidades interagem é substituir as arestas côncavas do segundo polígono B por arestas dummy que simulem que se trata de um polígono convexo, conv(B).
Feita a susbtituição aplica-se o algoritmo acima, obtendo o NFP de A, conv(B). Finalmente,
para concluir o NFPAB, substituem-se, em NFPAconv(B)as arestas dummy pelas originais. Contudo,
esta solução revela-se falaciosa no que diz respeito à substituição das arestas dummy, nomeada- mente quando existem colisões.
Figura 2.14: Soma de Minkowski com diagrama de declives entre um polígono côncavo e um polígono convexo. [BO06]
Soma de Minkowski com divisão de um dos polígonos em grupos de arestas A fim de solu-
cionar os problemas que surgiam na altura de substituir as arestas convexas no algoritmo anterior, Bennell e Song [BS08] propõem dividir um dos polígonos (B) em grupos de arestas consoante es- tes sejam convexos (aparecem no sentido anti-horário) ou côncavos (surgem no sentido horário).
Traçam-se, de seguida, os diagramas de declive do polígono A com cada partição de arestas de B e segue-se o algoritmo original de Gosh. No final ter-se-á vários conjuntos de arestas que será necessário unir para obter o NFP.
O polígono resultante da união simples de todos os conjuntos possui arestas internas e interse- ções que devem ser eliminadas. Neste passo são identificadas todas as interseções entre as secções de arestas (polygonal trips) do NFP, escolhendo aquelas que fazem parte dos limites exteriores.
Soma de Minkowski com decomposição de um dos polígonos Outra alternativa é decompor
A e B em subpolígonos convexos.
De seguida calcula-se o NFP para cada par de subpolígonos de A e B e, finalmente, compõem-
se todos os NFP obtidos de maneira a formar o NFPAB(figura 2.15).
O passo mais demorado deste processo é combinar os NFP dos sub-polígonos convexos visto
que há que calcular interseções e decidir que secções de arestas vão formar o perímetro do NFPAB.
Desta forma, é conveniente reduzir a decomposição de polígonos ao mínimo de forma a minimizar estes cálculos. Watson e Tobias [WT99] e Agarwal et al [AFH02] efetuam a decomposição em polígonos convexos.
Figura 2.15: Composição do NFPAB. [BO06]
Contudo, obter a decomposição ótima de um polígono em sub-polígonos convexos é um pro- cesso demorado e é preferível utilizar um algoritmo guloso que aproxime satisfatoriamente esta decomposição [BO06]..
Este método revela potencial para ser implementado na GPU devido à simplicidade dos cál- culos e ao facto de o processo de composição dos NFP’s poder ser simplificado pelo processo de rendering, evitando o cálculo das interseções e sobreposições.
Existe, apesar disso, a questão da precisão, que pode restringir a identificação de detalhes dos NFP como encaixes exatos, que surgem no desenho como pontos ou linhas.
Soma de Minkowski em GPU Uma abordagem recente [LM11] realiza a soma de Minkowski
em GPU, recorrendo à framework CUDA (Compute Unified Device Architecture) e renderizando diretamente o polígono resultante (recorrendo a OpenGL - Open Graphics Library). Este algo- ritmo realiza somas de formas a 2 ou a 3 dimensões.
Os dois polígonos ou poliedros iniciais são interpretados como uma série de triângulos que formam uma grelha. Os seus vértices são somados, originando um superconjunto dos pontos que constituem a soma de Minkowski. De seguida, os componentes que não são necessários para definir a superfície ou o contorno da soma são descartados, em paralelo (usando um programa em CUDA [KH10]), com base numa série de proposições e os restantes copiados para um vertex
buffer objecte desenhados usando OpenGL.
Numa implementação em GPU, este algoritmo tem a vantagem de não ser necessário transferir os dados (coordenadas dos vértices) para o dispositivo já que estes são calculados no próprio, tirando, adicionalmente, partido do paralelismo.
No entanto, esta estratégia, tendo sido desenvolvida com vista a realizar o planeamento de movimentos (motion planning), é orientada a problemas com 3 dimensões e não deteta buracos nos NFP’s, o que se revela uma limitação significativa em algoritmos de nesting (figura 2.16).
Figura 2.16: O buraco B não é detetado pelo algoritmo. [LM11]
No seguimento desta abordagem, é ainda proposto um algoritmo para determinar os voxels (ou pixels, se for uma forma a 2D) que definem o contorno externo da soma calculada. Desta forma, desenha-se a superfície correspondente à soma de Minkowski e preenche-se espaço circundante, delimitado pela caixa retangular que a envolve (bounding box) usando preenchimento ortogonal (orthogonal fill). Para terminar de preencher as concavidades recorre-se a flood fill, que, dado um ponto de partida, ”espalha” a cor por todas as células vazias adjacentes até encontrar o limite do poliedro. Estas etapas encontram-se ilustradas na imagem 2.17.
Figura 2.17: Detecção dos limites da soma de Minkowski recorrendo a orthogonal e flood fill.[LM11]