← Voltar à apresentação
Determinantes na Computação
10 questões sobre determinantes aplicados à computação, na mesma ordem de assuntos da apresentação. Todas usam apenas determinante 2×2 e leitura de sinal — as contas são de uma ou duas etapas e podem ser feitas de cabeça. Cada questão tem a resolução comentada escondida; tente responder antes de abrir. O gabarito oficial está no fim.
Da regra (2): sinal positivo significa giro à esquerda; negativo, à direita; zero, pontos colineares. O determinante também é o fator pelo qual a transformação multiplica áreas.
Um sistema de navegação precisa decidir de que lado de uma via um ponto se encontra. A via vai de A = (0, 0) até B = (4, 0), e o ponto consultado é C = (1, 3).
O valor do determinante e o giro correspondente são:
Alternativa D
Positivo significa giro à esquerda (anti-horário). A alternativa E acerta a conta e erra a leitura do sinal — que é justamente o que o predicado existe para dizer.
Um validador de polígonos em um sistema de informação geográfica rejeita vértices que não acrescentam forma ao contorno. Ele testa os pontos A = (1, 1), B = (3, 3) e C = (5, 5).
O determinante de orientação desses três pontos vale:
Alternativa A
Os três pontos estão sobre a mesma reta (y = x), então não formam triângulo: a figura degenerou. O ponto B não acrescenta nada ao contorno e pode ser descartado — é exatamente a decisão que o Graham scan toma no seu laço central.
O laço central do algoritmo de fecho convexo (Graham scan) é:
while (pilha.tamanho >= 2 &&
orient(penultimo, ultimo, novo) <= 0)
pilha.remover();
pilha.empilhar(novo);Quando o determinante do teste resulta negativo, o algoritmo:
Alternativa B
Determinante negativo significa que os três últimos pontos giram para a direita — o do meio faz o contorno "afundar" para dentro, e portanto não pode estar no fecho convexo. O while o remove e testa de novo com o que sobrou, podendo remover vários seguidos.
As alternativas C e D descrevem operações que o algoritmo não faz no laço: a ordenação acontece uma vez só, antes, e nenhuma distância é calculada. É esse o ponto da questão — o algoritmo inteiro se reduz a testes de sinal de determinante.
Um editor gráfico aplica a um objeto a transformação linear dada pela matriz abaixo. O objeto original ocupa uma área de 5 cm².
Depois da transformação, a área passa a ser:
Alternativa D
O determinante é o fator pelo qual a transformação multiplica áreas — não é preciso transformar cada vértice e recalcular: basta multiplicar pela área original.
A alternativa B confunde o determinante (10) com a área final; a C soma em vez de multiplicar.
Ao aplicar a transformação abaixo, um programa descobre que não consegue mais recuperar as posições originais dos vértices.
A explicação correta é:
Alternativa B
A segunda coluna é o dobro da primeira: as duas direções independentes do plano foram levadas para a mesma direção. A área da imagem é zero, e infinitos pontos de origem foram parar no mesmo lugar — não há como dizer de qual deles cada ponto veio.
A alternativa C descreve o caso de determinante negativo, que inverte a orientação mas continua perfeitamente invertível.
Blender, Unity e Unreal verificam o sinal do determinante da matriz de modelo antes de desenhar um objeto. Quando esse determinante é negativo, o motor precisa:
Alternativa B
Determinante negativo significa orientação invertida — o objeto foi espelhado. As normais, que apontavam para fora, passam a apontar para dentro, e o cálculo de iluminação inverte: superfícies iluminadas ficam escuras e vice-versa, dando a impressão de buracos no objeto.
Vale notar por que basta olhar o determinante: a matriz de modelo combina rotação, escala e cisalhamento, e nenhuma dessas parcelas isolada diz se houve inversão. Só o determinante resume o efeito líquido sobre a orientação.
Considere o programa abaixo, que implementa o predicado de orientação:
def orient(a, b, c):
return (b[0]-a[0])*(c[1]-a[1]) - (b[1]-a[1])*(c[0]-a[0])
print(orient((0,0), (2,0), (0,5)))Qual valor será exibido no console?
Alternativa E
Positivo: giro à esquerda. O triângulo tem área |10| / 2 = 5, o que confere com um triângulo retângulo de catetos 2 e 5.
Repare que o código usa a forma pré-subtraída — as diferenças são calculadas antes das multiplicações. Essa escolha não é estética: é ela que torna o predicado numericamente estável, porque as subtrações acontecem entre números da mesma ordem de grandeza, antes de qualquer multiplicação.
Antes de calcular onde um raio atinge uma face, o algoritmo de Möller-Trumbore avalia o determinante do sistema. Na versão plana do problema, ele se forma com a direção do raio d e a direção da aresta e:
Para d = (2, 1) e e = (4, 2), o valor do determinante e a decisão do algoritmo são:
Alternativa C
Determinante zero significa que d e e apontam na mesma direção — de fato, e = 2d. O raio corre paralelo à aresta, então não existe um único ponto de encontro: ou não há encontro nenhum, ou há infinitos. O algoritmo não tem o que devolver e descarta o caso antes de qualquer divisão.
É isso que o teste if (abs(det) < EPSILON) return false; faz na primeira linha do Möller-Trumbore: o determinante é a condição de parada, verificada antes da conta, e não um resultado obtido depois dela. Na versão real, em três dimensões, o determinante é 3×3 — mas o critério é idêntico.
Um sistema de recomendação mede a diversidade de dois itens pelo determinante da matriz cujas colunas são os vetores de característica desses itens. Dois vídeos têm os vetores u = (1, 2) e v = (3, 6):
O valor do determinante e o que ele diz sobre a dupla são:
Alternativa D
Como v = 3u, os dois vetores apontam exatamente na mesma direção. O paralelogramo que eles formariam tem área zero — está achatado numa reta. Recomendar os dois é recomendar duas vezes a mesma coisa.
É o mesmo colapso de todos os outros casos da lista, aplicado a outro domínio: duas direções que deveriam ser independentes viraram a mesma direção. Por isso, nos Processos de Ponto Determinantais, recomendar com variedade vira o problema de maximizar determinante.
Na cifra de Hill, a chave é uma matriz, e decifrar exige invertê-la em aritmética módulo 26 — o tamanho do alfabeto. Isso só é possível quando o determinante não tem fator comum com 26. Para a chave abaixo:
O determinante e a validade da chave são:
Alternativa A
Como 26 = 2 · 13 e 10 = 2 · 5, os dois compartilham o fator 2. Não existe inteiro que multiplicado por 10 devolva 1 módulo 26, então a matriz não tem inversa nesse sistema — e sem inversa não há como decifrar a mensagem.
A alternativa B é a armadilha, e é o ponto inteiro da questão: sobre os números reais, det ≠ 0 bastaria. Em aritmética modular o critério é mais exigente, e é por isso que, das 456.976 matrizes 2×2 possíveis módulo 26, apenas 157.248 (34,4%) servem como chave.
Lista elaborada a partir dos mesmos modelos e números usados na apresentação "Determinantes na Computação" (IFPE) e no material de apoio. Todas as resoluções foram conferidas por cálculo direto.