Envolvente convexa e orientação
Usar produtos vetoriais e uma pilha para construir a fronteira de um conjunto de pontos.
Orientação decide tudo
Envolvente é o menor convexo com todos os pontos. Guarda só vértices extremos.
Positivo vira à esquerda, negativo à direita, zero é colinear. Para (0,0),(2,0),(2,2) dá 4. Com coordenadas inteiras de módulo até , as diferenças cabem em int, mas promove para long long antes de subtrair: com coordenadas maiores, a subtração em int transborda antes de chegares à multiplicação.
Graham em três linhas
- Tira duplicados. Pivô é o menor
y, desempate pelo menorx. - Ordena por ângulo com
cross; mesma direção do mais próximo ao mais distante. - Empilha e, antes de pôr
q, retira enquantocross<=0nos dois últimos comq.
A pilha conserva curvas estritas à esquerda. Colinearidade elimina interiores. Cada ponto entra uma vez e sai no máximo uma vez: ordenação e varrimento .
No quadrado (0,0),(2,0),(2,2),(0,2) com (1,0) na fronteira e (1,1) no interior, o primeiro sai por colinearidade e o segundo por ficar interior. Ficam os quatro cantos em ordem anti-horária.
Ponto dentro do convexo
Assume um polígono convexo com h>=3 vértices extremos distintos em ordem anti-horária. Com menos de três pontos, testa igualdade ou pertença ao segmento.
- Fora se
cross(v[0],v[1],p)<0oucross(v[0],v[h-1],p)>0. - Zero pede teste ao segmento, não só à reta.
- Pesquisa o setor com bisseção nos raios e testa a aresta exterior com
cross>=0.
Custa .