O Fecho Convexo (Convex Hull)
Definição:
O fecho convexo de um conjunto de pontos é o menor polígono convexo que contém todos os pontos de
, como mostrado na figura 1. Aqui analisaremos especificamente o Convex Hull para um conjunto de pontos bidimensional. É importante, para fins de solução de vários problemas de geometria computacional, conseguirmos calcular o convex hull de um conjunto de pontos.

Observações importantes:
Seguem algumas observações importantes para conseguirmos um algoritmo que calcule o conjunto dos pontos no fecho convexo:
- Ao se ordenar os pontos de
por suas abscissas, o primeiro ponto (ou seja, o mais a esquerda) estará em
, e o mesmo também será verdade para o último.
- A mesma observação vale ao se ordenar os pontos de
pelas ordenadas.
- Ao se ordenar
de forma anti-horária, dois pontos consecutivos
e
, nessa ordem, em
formarão um vetor
à direita de qualquer outro vetor
, onde
é um ponto de
, ou seja
O algoritmo:
Um algoritmo subótimo em pode ser visto da seguinte maneira:
- Seja o ponto
o próximo ponto que sabemos que está em
(inicialmente o de abcissa mínima em
)
- Para cada outro ponto
em
que não está em
, verifique o cross do vetor
com todos os outros vetores
, sendo
um ponto de
diferente de
e
.
- Se em nenhum caso
,
é o próximo ponto em
.
- Quando
retornar ao ponto inicial, ou encontrarmos um ponto que ja está em
, terminamos o algoritmo.
Esse algoritmo, mesmo que funcional, não é muito eficiente. O algoritmo descrito abaixo tem complexidade , conhecido como monotone chain:
- Ordene os pontos por ordem crescente de abscissas, com desempate em ordenadas.
- Para simplificar o algoritmo, iremos separar o Convex Hull em duas partes: o Upper Hull e o Lower Hull, ou seja a parte de cima da envoltória, e a parte de baixo da envoltória.
- Para o Upper Hull:
- Assuma que estamos no ponto
. Iremos manter uma pilha equivalente ao prefixo dos pontos a esquerda de
.
- Enquanto o vetor entre
e o penúltimo da pilha estiver a direita do vetor entre o último e o penúltimo, retiraremos o último da pilha.
- Adicionamos
a pilha.
- Assuma que estamos no ponto
- Calculamos o Lower Hull de maneira semelhante, paralelamente ao Upper Hull, porém ao invés de checar esquerda no segundo passo, checamos se está a direita.
- O convex hull, ordenado no sentido anti-horário, será o upper hull que calculamos na ordem, até seu penúltimo ponto, seguido pelo Lower Hull na ordem reversa, até o segundo ponto.
Duas observações importantes:
- O segundo algoritmo só tem complexidade
pois temos que ordenar os pontos, caso os pontos já estejam ordenados, ele é apenas
- Do modo mostrado, pontos colineares no fecho aparecerão. Para garantir que só haverão dois pontos por segmento do polígono, basta mudar as inequações para também removerem vetores paralelos na pilha.
Problemas:
Para praticar e fixar os algoritmos de convex hull, e para aplicarmos suas ideias recomendamos os 2 seguintes problemas: