desafio 5 fundamentos da computaÇÃo grÁfica aluno: thiago ribeiro da motta matrÍcula: 1512348...

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

Upload: lucas-gabriel-de-carvalho-cerveira

Post on 07-Apr-2016

219 views

Category:

Documents


3 download

TRANSCRIPT

Desafio 5

Desafio 5

Fundamentos da Computao GrficaAluno: Thiago Ribeiro da MottaMatrcula: 1512348Perodo: 2015.1Desafio 5 Opposite e CHE table1) 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 TableTc (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 Vrtices) = { {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} }

012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Aresta1. Opposite TableTc (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 Vrtices) = { {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} }

012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17ArestaImplementado como um dicionrio com pesquisa por Aresta ( in = Aresta, out = Indice)Implementado como um dicionrio com pesquisa por Indice (in = Indice, out = aresta)1. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 171. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 0 n = 1 n1 = 2V[n1] = V[2] = 2V[n] = V[1] = 1eVolta = Tv[2,1] = 5Tv (Tabela de Vrtices) = { {0, 1}, {1, 2}, {2, 0}, {1, 4}, {4, 2}, {2, 1}, ...1. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

eVolta = 5m = Tc[5].ym = {5,3}.y = 3 p = 4 Tc (Tabela de Corner) = { {0, 1}, {1, 2}, {2, 0}, {3, 4}, {4, 5}, {5, 3}, ...1. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

p = 4 O[0] = 4O[4] = 0Visitado[0] = trueVisitado[4] = true1. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 1 n = 2 n1 = 0V[n1] = V[0] = 0V[n] = V[2] = 2eVolta = Tv[0,2] = nullTv (Tabela de Vrtices) = { {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 TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 1 n = 2 n1 = 0V[n1] = V[0] = 0V[n] = V[2] = 2eVolta = Tv[0,2] = nullNo existe uma aresta que comece no Vrtice 0 e v para o Vrtice 2.1. Opposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

eVolta = nullO[1] = -1Visitado[1] = true2. Compact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 172. Compact Half-Edge (CHE) TableCompact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = trueOpposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = trueOpposite TablePara cada corner cSe visitado[c] for falsen = Next(c)n1 = Next(n)eVolta = Tv[ V[n1], V[n] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].yp = Next(m)Se V[c] != V[p] ou V[n] != V[m]O[c] = pO[p] = cVisitado[c] = trueVisitado[p] = true2. Compact Half-Edge (CHE) TableCompact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true2. Compact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 0 n = 1 V[n1] = V[1] = 1V[n] = V[0] = 0eVolta = Tv[1,0] = 11Tv (Tabela de Vrtices) = { {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) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

eVolta = 11m = Tc[11].x = 11Tc (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) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

eVolta = 11m = Tc[11].x = 11O[0] = 11O[11] = 0Visitado[0] = trueVisitado[11] = true2. Compact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 2 n = 0 V[n1] = V[0] = 0V[n] = V[2] = 2eVolta = Tv[0,2] = nullTv (Tabela de Vrtices) = { {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 anlogo ao exemplo de c = 02. Compact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

c = 2 n = 0 V[n1] = V[0] = 0V[n] = V[2] = 2eVolta = Tv[0,2] = nullNo existe uma aresta que comece no Vrtice 0 e v para o Vrtice 2.2. Compact Half-Edge (CHE) TablePara cada corner cSe visitado[c] for falsen = Next(c) eVolta = Tv[ V[n], V[c] ]Se eVolta for nullO[c] = -1Visitado[c] = trueSenom = Tc[eVolta].xO[c] = mO[m] = cVisitado[c] = trueVisitado[m] = true012345601235467891011121314151617V = 0, 1, 2, 1, 4, 2, 3, 4, 1, 0, 5, 1, 1, 5, 6, 3, 1, 6C = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17Execuo

eVolta = nullO[2] = -1Visitado[2] = true