Desafio 5 FUNDAMENTOS DA COMPUTAÇÃO GRÁFICA ALUNO: THIAGO RIBEIRO DA MOTTA MATRÍCULA: 1512348 PERÍODO: 2015.1.

Slides:



Advertisements
Apresentações semelhantes
Grafos eulerianos 1.
Advertisements

2010/1 Teoria dos Grafos (INF 5037/INF2781) Grafos eulerianos.
Algoritmos em Grafos (Parte 2)
Gustavo Sant´Anna Ferreira Rodrigo Ribeiro de Souza
Programação em Java Prof. Maurício Braga
Redes de computadores II
Lógica de Programação Prof. Msc. Raul Paradeda Aula 4 Entrada/Saída.
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Exercícios PAA- Grafos
Pontes Seja (G) o número de componentes conexas de G. Uma ponte é uma aresta a tal que (G - a) > (G)
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Estrutura de Dados e Algoritmos e Programação e Computadores II
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
WAR STORY Stripping Triangulations Luciana Oliveira e Silva
Algoritmos Escher.
Computação Gráfica: Aula9: Renderização 3D
Marco Antonio Montebello Júnior
Ordenação Topológica Luis Raphael Mareze Marcus Vinicius Lemos Chagas
Aula 07 Comandos de Repetição while e for
Técnico/a de Electrónica, Automação e Computadores Laboratório de Amplificadores Operacionais 6016 – Amplificadores Operacionais Autor Nome do Aluno.
Algorítmos e estrutura de dados III
Algoritmos.
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso B: Remover o elemento que está no meio da lista, sendo que a lista possui vários.
Professor: Juliano Lucas Gonçalves
Algoritmos em Grafos.
Aux a fim início Simulação da execução de um algoritmo que troca o conteúdo de duas variáveis recebidas e apresenta o resultado da inversão: leia a,b a.
Aula Prática Classificação
Capítulo 3 Estruturas de Controle
Prova AA.
–3 –2 – y x –3 –2 – y x.
Denise Guliato Faculdade de Computação – UFU
Roberto Ferrari Mauricio Falvo
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.1 REMOVER Caso B: Remover o elemento que está no primeiro nó da lista, sendo que a lista possui.
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso C: Tentar remover elemento que não está na lista. Roberto Ferrari Mauricio Falvo.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de Dados Unidade 6 Simulação do exercício 6.2 Elaborada por Mauricio Falvo.
ORDENAÇÃO POR CONTAGEM
Denise Guliato Faculdade de Computação – UFU
Operadores Relacionais, Lógicos e comandos de condição
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estruturas de Dados Aula 9: Listas (parte 1)
Introdução a Programação
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Algoritmos de Ordenação
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso A: Remover o elemento que está no primeiro nó da lista, sendo que a lista possui.
ESTRUTURAS DE CONTROLE
Pilhas e Filas usando Alocação Estática e Dinâmica de Memória
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Universidade Federal de Mato Grosso do Sul Departamento de Computação e Estatística Circuitos de Euler em Paralelo Universidade Federal de Mato Grosso.
Estruturas de Dados Aula 15: Árvores
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Formato OBJ Leandro Tonietto Computação Gráfica. Formato OBJ - Geral O formato OBJ carrega informações sobre a malha poligonal, sobre o mapeamento de.
Msc. Daniele Carvalho Oliveira
Programação Dinâmica.
Linguagem de Programação II Parte VI Professora: Flávia Balbino da Costa.
Algoritmos e Programação I
Estruturas de Dados I Prof. Marcos Saúde
ORDENAÇÃO EM TEMPO LINEAR
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
PROJETO 2: ALUNOS UFRPE Parte 1. Dividindo para conquistar 1. Interação com o usuário 2. Leitura e escrita em arquivos 3. Regra de negócio para executar.
Monitoria GDI Aula Prática Aula 1: SQL + PL 1. Estudo de caso - continuação Pegar arquivo GDI.zip em Descompactar arquivo: o criacaoTabelas.SQL.
Estrutura de Dados Prof. André Cypriano M. Costa
Algoritmos de Pesquisa
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Grafos eulerianos 1.
Transcrição da apresentação:

Desafio 5 FUNDAMENTOS DA COMPUTAÇÃO GRÁFICA ALUNO: THIAGO RIBEIRO DA MOTTA MATRÍCULA: PERÍODO:

Desafio 5 – Opposite e CHE table 1) Tendo como entrada o vetor que descreve a triangulacao, implemente um algoritmo linear com o numero de triangulos (ou numero de arestas e vertices) para construir a tabela de opposites (O) da Corner Table. Dica: Use o vetor de triangulacao para construir uma lista de adjacencia de vertices para corner. Alem disso, lembre-se que o vetor de triangulacao funciona como um conversor de vertice para corner. 2) Altera o algoritmo de 1) para construir a tabela de opposites (O) da CHE. O programa deve ler um arquivo de entrada e escrever um arquivo de saida com o vetor de opposites.

1. Opposite Table Tc (Tabela de Corner) = { {0, 1}, {1, 2}, {2, 0}, {3, 4}, {4, 5}, {5, 3}, {6, 7}, {7, 8}, {8, 6}, {9, 10}, {10, 11}, {11, 9}, {12, 13}, {13, 14}, {14, 12}, {15, 16}, {16, 17}, {17, 15} } Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, {3, 4}, {4, 1}, {1, 3}, {0, 5}, {5, 1}, {1, 0}, {1, 5}, {5, 6}, {6, 1}, {3, 1}, {1, 6}, {6, 3} } V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Aresta

1. Opposite Table Tc (Tabela de Corner) = { {0, 1}, {1, 2}, {2, 0}, {3, 4}, {4, 5}, {5, 3}, {6, 7}, {7, 8}, {8, 6}, {9, 10}, {10, 11}, {11, 9}, {12, 13}, {13, 14}, {14, 12}, {15, 16}, {16, 17}, {17, 15} } Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, {3, 4}, {4, 1}, {1, 3}, {0, 5}, {5, 1}, {1, 0}, {1, 5}, {5, 6}, {6, 1}, {3, 1}, {1, 6}, {6, 3} } V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Aresta Implementado como um dicionário com pesquisa por Aresta ( in = Aresta, out = Indice) Implementado como um dicionário com pesquisa por Indice (in = Indice, out = aresta)

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 0 n = 1 n1 = 2 V[n1] = V[2] = 2 V[n] = V[1] = 1 eVolta = Tv[2,1] = 5 Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1},...

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução eVolta = 5 m = Tc[5].y m = {5,3}.y = 3 p = 4 Tc (Tabela de Corner) = { {0, 1}, {1, 2}, {2, 0}, {3, 4}, {4, 5}, {5, 3},...

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução p = 4 O[0] = 4 O[4] = 0 Visitado[0] = true Visitado[4] = true

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 1 n = 2 n1 = 0 V[n1] = V[0] = 0 V[n] = V[2] = 2 eVolta = Tv[0,2] = null Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, {3, 4}, {4, 1}, {1, 3}, {0, 5}, {5, 1}, {1, 0}, {1, 5}, {5, 6}, {6, 1}, {3, 1}, {1, 6}, {6, 3} }

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 1 n = 2 n1 = 0 V[n1] = V[0] = 0 V[n] = V[2] = 2 eVolta = Tv[0,2] = null Não existe uma aresta que comece no Vértice 0 e vá para o Vértice 2.

1. Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução eVolta = null O[1] = -1 Visitado[1] = true

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17

2. Compact Half-Edge (CHE) Table Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true

Opposite Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦n1 = Next(n) ◦eVolta = Tv[ V[n1], V[n] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].y ◦p = Next(m) ◦Se V[c] != V[p] ou V[n] != V[m] ◦O[c] = p ◦O[p] = c ◦Visitado[c] = true ◦Visitado[p] = true 2. Compact Half-Edge (CHE) Table Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 0 n = 1 V[n1] = V[1] = 1 V[n] = V[0] = 0 eVolta = Tv[1,0] = 11 Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, {3, 4}, {4, 1}, {1, 3}, {0, 5}, {5, 1}, {1, 0},...

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução eVolta = 11 m = Tc[11].x = 11 Tc (Tabela de Corner) = { {0, 1}, {1, 2}, {2, 0}, {3, 4}, {4, 5}, {5, 3}, {6, 7}, {7, 8}, {8, 6}, {9, 10}, {10, 11}, {11, 9},...

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução eVolta = 11 m = Tc[11].x = 11 O[0] = 11 O[11] = 0 Visitado[0] = true Visitado[11] = true

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 2 n = 0 V[n1] = V[0] = 0 V[n] = V[2] = 2 eVolta = Tv[0,2] = null Tv (Tabela de Vértices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, {3, 4}, {4, 1}, {1, 3}, {0, 5}, {5, 1}, {1, 0}, {1, 5}, {5, 6}, {6, 1}, {3, 1}, {1, 6}, {6, 3} } Pulei o exemplo de c = 1 por ser análogo ao exemplo de c = 0

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução c = 2 n = 0 V[n1] = V[0] = 0 V[n] = V[2] = 2 eVolta = Tv[0,2] = null Não existe uma aresta que comece no Vértice 0 e vá para o Vértice 2.

2. Compact Half-Edge (CHE) Table Para cada corner c ◦Se visitado[c] for false ◦n = Next(c) ◦ eVolta = Tv[ V[n], V[c] ] ◦Se eVolta for null ◦O[c] = -1 ◦Visitado[c] = true ◦Senão ◦m = Tc[eVolta].x ◦O[c] = m ◦O[m] = c ◦Visitado[c] = true ◦Visitado[m] = true V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6 C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Execução eVolta = null O[2] = -1 Visitado[2] = true