Winged-Edge Report

442 views
368 views

Published on

O uso de estruturas de dados avançadas para representação de objetos poligonais é importante em muitos casos, por exemplo: durante a simplificação da malha poligonal de um modelo tridimensional. É necessário o conhecimento das adjacências entre os componentes da malha, como faces e vértices. Tais estruturas são conhecidas como boundary representations (“representações de bordas”) ou simplesmente b-reps, que armazenam os dados de um objeto poligonal (vértices, arestas e faces), além de informações adicionais sobre adjacências (Glassner, 1991).

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
442
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Winged-Edge Report

  1. 1. Geometria Computacional - Winged Edge Michel Alves dos Santos ∗ Outubro de 2011 Resumo O uso de estruturas de dados avançadas para representação de objetos poligonais é impor- tante em muitos casos, por exemplo: durante a simplificação da malha poligonal de um modelo tridimensional (figura 3). É necessário o conhe- cimento das adjacências entre os componentes da malha, como faces e vértices. Tais estruturas são conhecidas como boundary representations (“representações de bordas”) ou simplesmente b-reps, que armazenam os dados de um objeto poligonal (vértices, arestas e faces), além de in- formações adicionais sobre adjacências (Glass- ner, 1991). Neste pequeno artigo iremos falar sobre a estrutura de dados Winged-Edge pro- posta por (Baumgart, 1975) para representação de modelos poligonais e exibir alguns trechos al- gorítmicos relativos a consultas que podem ser realizadas nessa estrutura com o intuito de des- cobrir relações de adjacência e incidência envol- vendo vértices, arestas e faces. As consultas se- rão apresentadas em formato de pseudo-código. 1 Introdução Uma das estruturas de dados baseada em aresta é a Winged-Edge, introduzida por (Baum- gart, 1975; Hanks, 2005). Esta estrutura associa a cada aresta identificadores das arestas imedi- atamente anterior e posterior. Para cada sen- tido da aresta temos, portanto, uma aresta an- terior e posterior, ou seja, anterior horária (pcw ou egde-head-right), posterior horária (ncw ou egde-tail-right), anterior anti-horária (pccw ou egde-tail-left) e posterior anti-horária (nccw ou egde-head-left). As relações de adjacência e in- cidência podem ser observadas nas figuras 1, 2, 4, 5 e 6. ∗Bacharelando em Ciência da Computação, Univer- sidade Federal do Estado de Alagoas (UFAL). E-mail: michel.mas@gmail.com. Disciplina: Geometria Compu- tacional. Docente Responsável: Thales Vieira. Figura 1: Visualização da estrutura de dados Winged-Egde. Observe que existe uma orien- tação entre os vértices inicial e final da aresta e que esta mesma ainda mantêm apontadores para as arestas posteriores e anteriores, ocor- rendo o mesmo com as faces adjacentes. A face denotada pelo apontador face_right possui sen- tido horário de navegação em relação a orienta- ção v0v1 enquanto a face face_left possui sen- tido anti-horário. Figura 2: Visualização da estrutura de dados Winged-Egde em relação a um polígono. Ob- serve como a estrutura e sua semântica de ori- entação facilitam a navegação em relação a dis- posição de elementos: vértices, arestas e faces. 1
  2. 2. Explorando esta representação das arestas, as faces incluem somente o identificador de uma aresta arbitrária e sua orientação na face. Partindo-se desta aresta, todas as demais ares- tas da face podem ser acessadas utilizando os identificadores de aresta anterior ou posterior. Uma variação desta estrutura adiciona os iden- tificadores das faces incidentes nos dois sentidos (Farin et al., 2003). A estrutura de dados Winged-Egde é um po- deroso mecanismo para manipulação de mode- los poligonais, onde a idéia básica é baseada em uma aresta e seus polígonos adjacentes. O nome dessa estrutura é proveniente do corpo de uma borboleta, imaginando os dois polígonos como suas asas e a aresta como o seu corpo, separando suas asas. 2 Estrutura Uma listagem em pseudo-código da estrutura Winged-Edge pode ser visualizada logo abaixo. Podemos observar que o receptáculo que repre- senta uma aresta através da abordagem Winged- Edge armazena oito apontadores: dois para os vértices inicial e final (tail e head), dois para as faces incidentes da esquerda e da direita (left e right) e quatro para as arestas adjacentes. /∗ Data s t r u c t u r e − Vertex ∗/ c l a s s WE_Vertex { WE_Edge ∗ incident_edge ; WE_VertexDataObject data ; } /∗ Data s t r u c t u r e − Edge∗/ c l a s s WE_Edge { // V e r t i c e s WE_Vertex ∗ v e r t e x _ t a i l ; WE_Vertex ∗ vertex_head ; // Faces WE_Face ∗ f a c e _ l e f t , ∗ f a c e _ r i g h t ; // Edges WE_Edge ∗ egde_head_left ; WE_Edge ∗ egde_head_right ; WE_Edge ∗ e g d e _ t a i l _ l e f t ; WE_Edge ∗ e g d e _ t a i l _ r i g h t ; // A data WE_EdgeDataObject data ; } /∗ Data s t r u c t u r e − Face ∗/ c l a s s WE_Face { WE_Edge ∗ incident_edge ; WE_FaceDataObject data ; } O receptáculo que representa vértices arma- zena apenas um apontador para a aresta no qual o mesmo incide. O receptáculo que representa uma face armazena, da mesma maneira, ape- nas um apontador para uma aresta arbitrária na qual a face incide. 3 Consultas Suportadas A escolha de uma estrutura de dados é deter- minada pelo conjunto de operações elementares que são suportadas eficientemente. A estrutura Winged-Edge possui um conjunto de operações básicas decorrentes de sua prototipação e um conjunto de operações extendidas de baixa com- plexidade. Alguns exemplos de consulta podem ser visualizados logo abaixo: • (FV) Todos os vértices de uma face; • (EV) Vértices de uma aresta (extremos); • (VF) Todas as faces que compartilham um vértice; • (EF) Todas as faces que compartilham uma aresta; • (FE) Todas as arestas de uma face; • (VE) Todas as arestas que compartilham um vértice; Para a estrutura Winged-Edge as operações EV e EF são consideradas básicas ou trivias (Nepe- rud et al., 2007). 3.1 Consultas Básicas Como dito antes, a estrutura Winged-Edge possui um conjunto de operações básicas decor- rentes de sua prototipação. Algumas dessas ope- rações são listadas logo abaixo: • Dado um vértice, retornar a aresta imedi- tamente incidente ao vértice; • Dada uma aresta, retornar os vértices de suas extremidades (EV); • Dada uma aresta, retornar as faces que o compartilham; • Dada uma aresta, retornar as arestas adja- centes; • Dada uma face, retornar a aresta imediata- mente incidente. 2
  3. 3. /∗ I n c i d e n t Edge∗/ WE_Edge E = v−>incident_edge ; /∗ Extreme V e r t i c e s ∗/ WE_Vertex t a i l = e−>v e r t e x _ t a i l ; WE_Vertex head = e−>vertex_head ; /∗ A l l f a c e s s h a r i n g an edge ∗/ WE_Face l e f t = e−>f a c e _ l e f t ; WE_Face r i g h t = e−>f a c e _ r i g h t ; // Adjacent Edges WE_Edge h l = e−>egde_head_left ; WE_Edge hr = e−>egde_head_right ; WE_Edge t l = e−>e g d e _ t a i l _ l e f t ; WE_Edge t r = e−>e g d e _ t a i l _ r i g h t ; // I n c i d e n t Edge WE_Edge E = f −>incident_edge ; 3.2 Consultas Extendidas Como dito antes, a estrutura Winged-Edge possui um conjunto de operações extendidas de baixa complexidade. Alguns exemplos são apre- sentados a seguir: • Dada uma face retornar todas as arestas; /∗ A l l edges o f a f a c e ∗/ WE_Edge_List FE (WE_Face f ) { WE_Edge_List l i s t ; WE_Edge e0 = f −>incident_edge ; WE_Edge e = e0 ; do { l i s t . put ( e ) ; i f ( e−>f a c e _ l e f t == f ) { e = e−>egde_head_left ; } e l s e { e = e−>e g d e _ t a i l _ r i g h t ; } } w h i l e ( e != e0 ) ; r e t u r n l i s t ; } As operações FV e VF são similares. • Dado um vértice retornar todas as arestas que o compartilham; /∗ A l l edges s h a r i n g a v e r t e x ∗/ WE_Edge_List VE (WE_Vertex v ) { WE_Edge_List l i s t ; WE_Edge e0 = v−>incident_edge ; WE_Edge e = e0 ; do { l i s t . put ( e ) ; i f ( e−>vertex_head == v ) { e = e−>egde_head_right ; } e l s e { e = e−>e g d e _ t a i l _ l e f t ; } } w h i l e ( e != e0 ) ; r e t u r n l i s t ; } • Dado um vértice retornar todas as faces in- cidentes; WE_Face_List VFL (WE_Vertex v ) { WE_Face_List l i s t ; WE_Edge e0 = v−>incident_edge ; WE_Edge e = e0 ; WE_Face f = e−>f a c e _ l e f t ; do { l i s t . put ( f ) ; i f ( e−>vertex_head == v ) { e = e−>egde_head_right ; f = e−>f a c e _ l e f t ; } e l s e { e = edge−>e g d e _ t a i l _ l e f t ; f = e−>f a c e _ r i g h t ; } } w h i l e ( e != e0 ) ; r e t u r n l i s t ; } • Dado um vértice retornar todos os demais vértices vizinhos; WE_Vertex_List VVL (WE_Vertex v ) { WE_Vertex_List l i s t ; WE_Edge e0 = v−>incident_edge ; WE_Edge e = e0 ; WE_Vertex v = e−>vertex_head ; do { l i s t . put ( v ) ; i f ( e−>vertex_head == v ) { e = e−>egde_head_right ; v = e−>vertex_head ; } e l s e { e = edge−>e g d e _ t a i l _ l e f t ; v = e−>v e r t e x _ t a i l ; } } w h i l e ( e != e0 ) ; r e t u r n l i s t ; } • Dado uma aresta retornar todos as demais arestas vizinhas; WE_Edge_List EEL (WE_Edge E) { WE_Edge_List l 1 = VEL(E−> v e r t e x _ t a i l ) ; WE_Edge_List l 2 = VEL(E−>vertex_head ) ; 3
  4. 4. // Remove edge E from the l i s t s l 1 . remove (E) ; l 2 . remove (E) ; // Combine l i s t s r e t u r n l 1 + l 2 ; } • Dada uma face retornar as demais faces in- cidentes; WE_Face_List FFL (WE_Face F) { WE_Edge_List l 1 = FE(F) ; WE_Face_List l i s t ; WE_Edge e ; f o r each ( e i n l 1 ) { i f ( e−>f a c e _ l e f t == F) { l i s t . put ( e−>f a c e _ r i g h t ) ; } e l s e { l i s t . put ( e−>f a c e _ l e f t ) ; } } r e t u r n l i s t ; } • Calcular a K-ésima vizinhança estrelada, dado K e um vértice; /∗ KStarryNeighborhood − Neighbourhood s t a r ∗/ //K − s i z e o f neighborhood // v l − v e r t e x l i s t with one v e r t e x i n i t i a l l y // b l − l i s t t h a t c h e c k s i f v e r t e x l a b e l e d WE_Vertex_List KSN( I n t K, WE_Vertex_List vl , B o o l L i s t& b l ) { i f (K == 1 ) { r e t u r n Neighbors ( vl , b l ) ; } e l s e { r e t u r n Neighbors (KSN(K−1 , vl , b l ) , b l ) ; } } /∗ Returns l i s t o f a l l n e i g h b o r s ∗/ WE_Vertex_List Neighbors ( WE_Vertex_List vl , B o o l L i s t& b l ) { WE_Vertex v ; WE_Vertex_List l i s t f o r each ( v i n v l ) { l i s t = l i s t + VVL( v , b l ) ; } r e t u r n l i s t ; } /∗ Returns a l l marked n e i g h b o r s ∗/ WE_Vertex_List VVL( WE_Vertex v , B o o l L i s t& b l ) { WE_Vertex_List l i s t ; WE_Edge e0 = v−>i n c i d e n t _ e d g e ; WE_Edge e = e0 ; WE_Vertex v = e−>vertex_head ; do { // c h e c k s i f t he v e r t e x i s marked i f ( ! b l [ v−>i d ] ) { l i s t . put ( v ) ; b l [ v−>i d ] = t r u e ; } i f ( e−>vertex_head == v ) { e = e−>egde_head_right ; v = e−>vertex_head ; } e l s e { e = edge −> e g d e _ t a i l _ l e f t ; v = e−> v e r t e x _ t a i l ; } } w h i l e ( e != e0 ) ; r e t u r n l i s t ; } 4 Conclusões A estrutura de dados Winged-Edge foi intro- duzida por (Baumgart, 1975) para simplificar a manipulação de modelos poligonais pois man- têm tanto informação geométrica quanto topoló- gica (figura 6), o que facilita ainda mais o trata- mento de alguns modelos. Além disso Winged- Edge possui um conjunto de operações triviais que facilitam a execução de consultas de adja- cência e incidência sem proporcionar demasiada sobrecarga. A estrutura de dados Winged-Edge permite a passagem rápida entre faces, arestas e vér- tices, devido à sua estrutura explicitamente li- gada em rede (figura 4). Esta forma de especifi- car uma grade desestruturada está em contraste com especificações mais simples de malhas de polígonos, tais como nó e lista de elementos, ou a conectividade implícita de uma grade regular (de Berg et al., 2008). Figura 3: A estrutura Winged-Egde é uma re- presentação de dados utilizada para descrever modelos poligonais em computação gráfica. Ex- plicitamente descreve a geometria e a topologia de faces, arestas e vértices quando três ou mais superfícies se reúnem e se encontram em uma aresta comum. O principal incômodo da estrutura Winged- Egde é sua grande demanda de armazenamento o que ocasiona maior complexidade devido à manutenção dos vários índices pertencentes as listas de vértices, arestas e faces. Um exemplo dessa demanda pode ser observado através da figura 5. 4
  5. 5. Figura 4: A estrutura Winged-Egde permite a pas- sagem rápida entre faces, arestas e vértices, devido à estrutura explicitamente ligada em rede. Esta re- presentação é amplamente utilizada em programas de modelagem para fornecer maior flexibilidade na alteração dinâmica da geometria da malha, com isso operações de divisão e mesclagem podem ser execu- tadas rapidamente (Foley, 1996). Referências Baumgart, B. G. (1975), ‘Winged-edge polyhe- dron representation for computer vision’, Na- tional Computer Conference. Beall, M. W. & Shephard, M. S. (1997), ‘A ge- neral topology-based mesh data structures’, International Journal for Numerical Methods in Engineering 40(9), 1573–1596. Braid, I., Hillyard, R. & Stroud, I. (1980), ‘Stepwise construction of polyhedra in geo- metric modelling’, Mathematical Methods in Computer Graphics and Design pp. 123–141. de Berg, M., Cheong, O. & van Kreveld, M. (2008), Computational geometry: algorithms and applications, 3 ed., Springer. Farin, G., Hamann, B. & Hagen, H. (2003), Hie- rarchical and geometrical methods in scientific visualization, Mathematics and visualization, Springer. Fischer, R. (1991), Genesys - um sistema hí- brido de modelagem de sólidos, Master’s the- sis, Departamento de Informática - Pontifícia Universidade Católica - PUC-Rio - Rio de Ja- neiro. Foley, J. D. (1996), Computer graphics: princi- ples and practice, 2 ed., Addison-Wesley Pro- fessional. Glassner, A. S. (1991), ‘Maintaining winged- edge models’, Graphics Gems II - Academic Press 2, 191–201. Gois, J. & Piteri, M. (2002), ‘Geração automá- tica de malhas de elementos finitos e a estru- tura de dados winged-edge modificada’, Ten- dências em Matemática Aplicada e Computa- cional 3(1), 121–130. Hanks, B. W. (2005), Proceedings of the 14th International Meshing Roundtable, Springer. Leondes, C. T. (2002), Database and data com- munication network systems: techniques and applications, Vol. 2, Elsevier Science - Acade- mic Press. Neperud, B., Lowther, J. & Shene, C.-K. (2007), ‘Visualizing and animating the winged-edge data structure’, Elsevier. O’Rourke, J. (1998), Computational geometry in C, 2 ed., Cambridge University Press. Piteri, M. (1999), Geração Automática de Ma- lhas Hierárquico-Adaptativas em Domínios Bidimensionais e Tridimensionais, PhD the- sis, Universidade Técnica de Lisboa. Piteri, M. & Almeida, J. (1995), ‘Hierarchical 2d mesh generation using topological data struc- tures’, Education, Practice and Promotion of Computational Methods in Engineering Using Small Computers 2, 981–986. Vince, J. A. (2000), Essential computer anima- tion fast: how to understand the techniques and potential of computer animation, Sprin- ger. Conteúdo 1 Introdução 1 2 Estrutura 2 3 Consultas Suportadas 2 3.1 Consultas Básicas . . . . . . . . . . . 2 3.2 Consultas Extendidas . . . . . . . . 3 4 Conclusões 4 Referências 5 5
  6. 6. Figura 5: A principal desvantagem da estrutura Winged-Egde é a sua grande demanda de armazenamento o que acarreta maior complexidade devido à manutenção de muitos índices. Uma boa discussão das questões de implementação da estrutura Winged-Egde para malhas pode ser encontrada no livro Graphics Gems II. Figura 6: Uma estrutura de dados topológica representa a completa topologia de um objeto em estudo (Gois & Piteri, 2002; Beall & Shephard, 1997; Piteri & Almeida, 1995; Piteri, 1999). Uma característica fundamental associada a essas estruturas é que qualquer informação relativa à topologia pode ser obtida em tempo constante ou proporcional ao número de entidades envolvidas, independentemente da dimensão do problema, quer a malha possua 1 milhão de elementos triangulares ou 100 mil elementos, já que estas informações são de natureza local. A estrutura de dados topológica Winged-Egde concentra a maior parte de suas informações na entidade aresta (O’Rourke, 1998). Isto acontece em função do fato de que em qualquer modelo poliedral manifold, uma aresta pertence a exatamente duas faces, ou seja, este número é invariante (Baumgart, 1975). Da forma como foi concebida originariamente, esta estrutura não permite representar diretamente uma face com mais de uma componente conexa, ou seja, buracos em seu interior (Vince, 2000). Com a introdução da entidade ciclo (Braid et al., 1980), pode-se representar faces com mais de uma componente conexa, e assim, a estrutura passa a ser referenciada como winged-edged modificada (Fischer, 1991; Leondes, 2002). 6

×