Poliedros convexos na prática
O que é um poliedro convexo, basicamente, é um sólido formado por faces planas onde qualquer segmento de reta ligando dois pontos dentro dele fica inteiramente contido no interior. Não tem buracos, não tem cavidades, e toda aresta faz fronteira exatamente duas faces. Parece simples porque é simples no conceito, mas a implementação real costuma doer. Eu já perdi uma tarde inteira rastreando um erro de normal de face em um mesh que parecia perfeitamente convexo visualmente. O problema era que um vértice interno ao hull estava levemente para fora do plano definido por suas faces adjacentes — cerca de 0,003 unidades de desvio, invisível a olho nu. A solução foi usar o algoritmo de separating axis theorem (SAT) para testar cada face do poliedro como eixo de projeção. Se todas as projeções se sobrepusessem, o mesh era convexo; se alguma faceta mostrasse separação, você tinha seu violador. Isso levou meu tempo de debug de horas para minutos.Pergunta frequente: o que é um poliedro convexo?
Quando alguém pergunta o que é um poliedro convexo num contexto técnico, geralmente estão falando de uma estrutura que obedece duas condições principais: a interseção de todos os semiespaços definidos pelas faces do poliedro deve ser exatamente o próprio poliedro, e não pode haver nenhuma reentrância. Matematicamente, um poliedro convexo é a interseção finita de semiespaços fechados. Equivalência importante: todo poliedro convexo pode ser descrito como o envelope convexo de um conjunto finito de vértices. A dualidade entre essas duas definições — meio espaço versus envoltório convexo — é onde as coisas começam a ficar interessantes. Na prática, você geralmente trabalha com uma delas e acaba precisando da outra em algum momento. Se você está usando malha poligonal, lida com vértices. Se está fazendo colisão ou raycasting, lida com planos de face.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Propriedades que importam de verdade
A fórmula de Euler para poliedros convexos diz que V - A + F = 2, onde V são vértices, A arestas e F faces. Isso vale para qualquer poliedro convexo. Mas a coisa que realmente importa no dia a dia é que, para um poliedro convexo com n vértices, o número máximo de faces é 2n - 4 e o número máximo de arestas é 3n - 6. Essas limitações são úteis quando você está validando se um mesh realmente representa um poliedro convexo — se seu modelo tem 100 vértices mas 250 faces, algo está errado. Outro detalhe que ninguém menciona o suficiente: em qualquer poliedro convexo, a soma dos ângulos diedrais entre as faces não pode exceder 360 graus em qualquer vértice quando medidos de forma apropriada. Isso é o que impede reentrâncias. Quando você encontra um vértice onde os planos das faces adjacentes criam uma dobra para dentro, não é mais convexo. Eu já vi gente usar o termo "convexo" de forma solta pra descriver objetos que são convexos por partes mas não globalmente. Um poliedro em formato de U, por exemplo, claramente não é convexo. Dois cubos sobrepostos parcialmente também não. A verificação é direta: pegue qualquer par de pontos dentro do sólido e trace uma linha entre eles. Se qualquer ponto dessa linha cair fora do volume, o objeto não é convexo. Simples, mas fácil de errar quando se confia só na intuição visual.Cuidados comuns e armadilhas
Uma armadilha bem comum é confundir convexidade de malha com convexidade geométrica. Você pode ter um mesh onde todas as faces são polígonos convexos individualmente, mas o sólido como um todo é côncavo. Cada face sendo convexa não implica que o volume seja convexo. A verificação precisa ser feita no nível do volume, não no nível das faces. Outro problema recorrente é deal with floating point precision. Quando você está verificando convexidade computacionalmente, erros de arredondamento podem fazer com que um vértice que deveria estar exatamente no plano de uma face seja projetado ligeiramente para um lado ou para o outro. Em testes de colisão, isso gera falsos positivos ou falsos negativos. A prática recomendada é usar uma tolerância, mas a tolerância precisa ser relativa à escala do objeto, não absoluta. Um erro de 0,001 é aceitável em um modelo de 10 metros, mas catastrófico em um modelo de 0,1 metro.A convexidade também falha de forma silenciosa quando vértices colineares aparecem em uma mesma face — ou seja, três ou mais vértices alinhados formando um ângulo de 180 graus. Isso não quebra a convexidade, mas causa problemas sérios em algoritmos que assumem ângulos estritamente menores que 180. Em renderização e cálculos de normais, vértices colineares geram normales degeneradas. A correção é simplificar a face removendo vértices redundantes antes de processar.