• Nenhum resultado encontrado

Manipula¸c˜ ao de modelos de contorno

Como vimos na se¸c˜ao precedente, uma pequena cole¸c˜ao de opera¸c˜oes de manipula¸c˜ao (e suas inversas) s˜ao suficientes para se descrever todos os modelos planos de interesse. De acordo com a teoria, somente trˆes tipos b´asicos de opera¸c˜oes manipulativas s˜ao necess´arias:

(1) Uma primitiva “prot´otipo” que cria modelos planos esquel´eticos.

(2) Opera¸c˜oes topol´ogicas locais que subdividem a seq¨uˆencia de arestas de uma face ou v´ertice.

(3) Uma opera¸c˜ao topol´ogica global que implementa a soma conexa de dois pol´ıgonos (po- dendo eles estar ou n˜ao em uma mesma componente conexa).

Esta teoria se transporta para modelos de contorno. As opera¸c˜oes de manipula¸c˜ao sobre modelos planos ter˜ao seus correspondentes na forma de operadores de Euler que operam sobre a topologia da estrutura de dados de um modelo de contorno. Sendo realiza¸c˜oes dos modelos planos te´oricos para estruturas de dados de contorno reais, os operadores de Euler compartinham a consistˆencia e completeza enunciados no corol´ario (5.1.6) e teorema (5.1.7).

5.2.1

Nota¸oes e conven¸oes

Os operadores de Euler foram primeiramente introduzidos por Baumgart no contexto da estrutura de dados winged-edge. Como esta estrutura de dados ´e a base natural para discutir os operadores, assumiremos o seu uso segundo a figura (4.6) estendida com loops para se representar faces n˜ao simples. Por conveniˆencia de linguagem, os loops internos ser˜ao denominados an´eis. Tamb´em usaremos o termo casca para denotar uma componente conexa de uma estrutura de dados de bordo.

Tamb´em usaremos a conven¸c˜ao da existˆencia de loops vazios na estrutura de dados, isto ´e, loops consistindo de apenas um v´ertice, sem arestas. Tais entidades s˜ao ´uteis, por exemplo, na representa¸c˜ao do modelo de bordo do modelo plano esquel´etico.

Por conven¸c˜ao hist´orica, os operadores s˜ao usualmente denotados por nomes mnemˆonicos.

M − make − constr´oi K − kill − destr´oi S − split − quebra J − join − encaixa V − vertex − v´ertice E − edge − aresta F − face − face S − solid − s´olido H − hole − buraco R − ring − anel

Por exemplo, o nome “mev” significa “Make an Edge and a Vertex” (construa uma aresta e um v´ertice).

´

E importante ter em mente que os operadores de Euler podem ser implementados de v´arias maneiras que podem variar profundamente de acordo com as estruturas de dados.

5.2.2

Primitivas esquel´eticas: MVFS e KVFS

A teoria que desenvolvemos nos diz que por meios de manipula¸c˜oes topol´ogicas locais e globais, todos os modelos planos de interesse podem ser criados a a partir de um ´unico modelo plano esquel´etico. Isto significa que uma ´unica primitiva esquel´etica ´e suficiente para nossos prop´ositos. O operador MVFS desempenha este papel em nossa cole¸c˜ao. Como o nome sugere, ele cria um instanciamento da estrutura de dados que possui uma face e um ´unico v´ertice. Ent˜ao a nova face possui um ´unico loop “vazio” com nenhuma aresta. O efeito de MVFS ´e ilustrado na figura (5.4).

O “s´olido” criado por MVFS pode n˜ao satisfazer a nossa no¸c˜ao intuitiva de um objeto s´olido. Apesar disto, ele ´e ´util como o estado inicial para se criar um modelo de bordo com uma seq¨uˆencia de operadores de Euler.

wv

f

NIL

Figura 5.4: O operador MVFS.

Analogamente `as opera¸c˜oes de manipula¸c˜ao de modelos planos, todos os operadores de Euler possuem operadores inversos que desfazem o efeito do operador “positivo” associado. KVFS ´e o operador inverso de MVFS. Ele destr´oi o instanciamente esquel´etico da estrutura de dados que foi criado por MVFS.

5.2.3

Manipula¸oes locais

Em analogica com as opera¸c˜oes locais em modelos planos, necessitamos de operadores que possam trabalhar sobre propriedades topol´ogicas locais de um modelo de contorno.

MEV, KEV

Os operadores MEV e MEF (que ser˜ao descritos na pr´oxima se¸c˜ao), com seus inversos (KEV, KEF) correspondem exatamente com as opera¸c˜oes de quebra de v´ertices e pol´ıgonos para modelos planos. Desta maneira, MEV subdivide o ciclo de arestas de um v´ertice “quebrando” um v´ertice em dois e unindo-os com uma nova aresta (figura (5.5)−(a)). O efeito disto ´e o de se adicionar um v´ertice e uma aresta na estrutura de dados, como sugere o nome do operador.

A aplicabilidade de MEV pode ser estendida para v´ertices solit´arios (isto ´e, v´ertices que aparecem em loops vazios tais como aqueles criados por MVFS) subdividindo-o em dois novos ligados por uma aresta (veja a figura (5.5)−(b)). Podemos tamb´em incluir o caso em que um novo v´ertice ´e ligado com um antigo por meio de uma nova aresta, como ilustrado na figura (5.5)−(c). O operador inverso KEV ´e capaz de desfazer quaisquer um dos trˆes casos da figura (5.5). Em outras palavras, dada uma aresta que conecta dois v´ertices distintos, KEV pode remover a aresta e colapsar os v´ertices em um e combinar seus ciclos de arestas.

MEF, KEF

O operador MEF subdivide um loop unindo dois v´ertices com uma nova aresta. O efeito ´e o de se adicionar uma nova aresta e uma nova face na estrutura de dados. Em acr´escimo ao caso ordin´ario da figura (5.6)−(a), podemos estender a aplicabilidade de MEF para loops vazios da mesma maneira que fizemos com MEV. Ent˜ao o resultado de se subdividir um v´ertice “solit´ario” consiste de uma aresta “circular” separando duas faces. Observe que os v´ertices inicial e final de tal arestas s˜ao iguais; este ´e um caso admitido pela estrutura de dados winged-edge (figura (5.6)−(b)). Como uma caso mais geral disto, ´e sempre poss´ıvel “conectar” um v´ertice a si mesmo em termos de MEF, como ilustra a figura (5.6)−(c).

u u u u u u u u u (a) (b) (c)

Figura 5.5: O operador MEV.

u u (a) (b) u u u u &% '$ (c) u u &% '$

Novamente, o operador inverso KEF pode desfazer o efeito de MEF em cada caso. Mais precisamente, dada uma aresta adjacente a duas faces distintas, KEF ´e capaz de remover a aresta e unir as duas faces em uma ´unica. O loop da face resultante ´e combina¸c˜ao dos bordos originais.

Note que as descri¸c˜oes de KEV e KEF s˜ao “duais” uma da outra.

KEMR, MEKR

Os operadores MEV e MEF s˜ao “fundamentais” no sentido que eles podem ser derivados dire- tamente da teoria de modelos planos. Em contraste, a opera¸c˜ao local restante ´e um operador de “conveniˆencia” cuja necessidade ´e devida `as nossas conven¸c˜oes.

Acima, “loops vazios” foram usados para realizar modelos planos esquel´etricos no dom´ınio da estrutura de dados de bordo. Para um uso completo de loops vazios, ´e ´util introduzir um operador especial para eles.

O operador resultante KEMR quebra um loop em outros dois removendo uma aresta que aparece duas vezes nele (veja a figura (5.7)−(a)). Ent˜ao KEMR divide uma curva conexa que

(a) (c) u u u u (b) u u u u u u u u

Figura 5.7: O operador KEMR.

´e bordo de uma face em duas. O efeito ´e o de se remover uma aresta e adicionair um anel na estrutura de dados. Os casos especiais em que um ou ambos dos loops resultantes s˜ao vazios tamb´em s˜ao inclu´ıdos (figura (5.7)−(b, c)).

O operador inverso MEKR pode combinar dois loops de uma face unindo um v´ertice de cada com uma nova aresta.

5.2.4

Manipula¸oes globais: KFMRH, MFKRH

Nenhum dos operadores discutidos at´e agora ´e capaz de modificar as propriedades globais da estrutura de dados, em geral dividindo o s´olido em duas componentes ou criando um “buraco”. Este ´e o objetivo dos operadores de Euler restantes.

O operador KFMRH ´e uma realiza¸c˜ao da opera¸c˜ao de soma conexa discutida na se¸c˜ao (5.1.2). Dadas duas faces (digamos, f1 e f2) o operador as une em uma ´unica transformando os loops de bordo de f2 em um anel de f1. Assim, o efeito ´e o de se remover uma face (f2) e adicionar um anel. Note que KFMRH n˜ao possui nenhum efeito de arranjo local das arestas ou v´ertices — ela ´e realmente uma manipula¸c˜ao global. Isto tamb´em significa que se ´e dif´ıcil ilustrar o seu efeito. KFMRH ´e um nome infeliz porque o operador n˜ao necessariamente cria um “buraco”. De fato, KFMRH somente faz isto se as duas faces sobre as quais ele opera est˜ao em uma mesma casca. Quando aplicado a faces pertencentes a cascas distintas, seu efeito ´e o de combin´a-las em uma ´unica e o nome “KFSMR” (onde S significa “shell”) seria mais apropriado. Mas nenhum dos nomes seria melhor do que outro, assim permaneceremos com KFMRH.

Novamente, um operador inverso MFKRH ´e capaz de reverter o efeito de KFMRH. Ele modifica um anel de uma face para um loop de bordo de uma nova face.

Relembre que a opera¸c˜ao de soma conexa para modelos planos foi especificada como acidio- nando uma nova aresta para conectar os dois pol´ıgonos que devem ser unidos, enquanto KFMRH consegue o mesmo efeito fazendo com que o bordo de uma face seja um anel na outra. Fora isto, as opera¸c˜oes s˜ao totalmente an´alogas.

Documentos relacionados