Envolvente convexa e orientação

Usar produtos vetoriais e uma pilha para construir a fronteira de um conjunto de pontos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Orientação decide tudo

Envolvente é o menor convexo com todos os pontos. Guarda só vértices extremos.

cross⁡(p,q,r)=(qx−px)(ry−py)−(qy−py)(rx−px).\operatorname{cross}(p,q,r)=(q_x-p_x)(r_y-p_y)-(q_y-p_y)(r_x-p_x).

Positivo vira à esquerda, negativo à direita, zero é colinear. Para (0,0),(2,0),(2,2) dá 4. Com coordenadas inteiras de módulo até 10610^6, 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

  1. Tira duplicados. Pivô é o menor y, desempate pelo menor x.
  2. Ordena por ângulo com cross; mesma direção do mais próximo ao mais distante.
  3. Empilha e, antes de pôr q, retira enquanto cross<=0 nos dois últimos com q.

A pilha conserva curvas estritas à esquerda. Colinearidade elimina interiores. Cada ponto entra uma vez e sai no máximo uma vez: ordenação O(nlog⁡n)O(n\log n) e varrimento O(n)O(n).

(0,0)(2,0)(2,2)(0,2)(1,0)(1,1)Só os cantos são extremos.

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.

  1. Fora se cross(v[0],v[1],p)<0 ou cross(v[0],v[h-1],p)>0.
  2. Zero pede teste ao segmento, não só à reta.
  3. Pesquisa o setor com bisseção nos raios e testa a aresta exterior com cross>=0.

Custa O(log⁡h)O(\log h).

Traço completo.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.