A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Desafio 5 FUNDAMENTOS DA COMPUTAÇÃO GRÁFICA ALUNO: THIAGO RIBEIRO DA MOTTA MATRÍCULA: 1512348 PERÍODO: 2015.1."— Transcrição da apresentação:

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

2 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.

3 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} } 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

4 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} } 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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)

5 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

6 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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},...

7 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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},...

8 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

9 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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} }

10 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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.

11 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

12 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

13 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

14 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

15 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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},...

16 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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},...

17 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

18 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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

19 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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.

20 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 0 12 34 5 6 0 12 3 5 4 6 7 8 9 10 11 12 13 14 15 16 17 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


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

Apresentações semelhantes


Anúncios Google