BrunoP.Blog

O segredo por trás de toda curva suave que você já viu na tela

Abri o logo de um projeto no editor vetorial e mexi nas 'alcinhas' que controlam as curvas: como meia dúzia de pontos viram uma curva perfeita? Te deixo um brinquedo pra arrastar os pontos e ver a mágica de De Casteljau acontecer.

Esses dias eu estava mexendo no logo de um projeto novo, daqueles que a gente abre o arquivo vetorial só pra "ajeitar um detalhezinho" e some por duas horas. Cliquei numa curva, e do nada apareceram aquelas alcinhas — os pauzinhos com uma bolinha na ponta que saem de cada ponto. Comecei a arrastar uma delas e a curva inteira se mexeu junto, lisinha, como se fosse de borracha. Aí me bateu a pergunta de sempre: como é que meia dúzia de pontos vira uma curva tão perfeita?

Spoiler: tem uma matemática lindíssima por trás, e o nome dela é curva de Bézier. Montei um brinquedo aqui embaixo pra você arrastar os pontos e ver a mágica acontecer ao vivo. Mas antes deixa eu te contar de onde isso veio — porque a história tem carro envolvido (literalmente).

A curva que nasceu numa fábrica de carros

O nome vem de Pierre Bézier, um engenheiro da Renault nos anos 1960. O problema dele era bem concreto: como descrever, em números que uma máquina entende, a curva suave da lataria de um carro? Naquela época o desenho era feito à mão, em escala real, com réguas flexíveis de madeira. Bézier precisava de uma forma matemática de representar essas curvas pra poder fabricá-las com precisão.

Curiosamente, um outro engenheiro francês, Paul de Casteljau, da concorrente Citroën, tinha chegado a ideias muito parecidas antes — mas a Citroën tratou tudo como segredo industrial e quase não publicou. Por isso a curva leva o nome de Bézier, mas o algoritmo elegante que faz ela funcionar leva o nome de De Casteljau. É esse algoritmo que está animado no brinquedo aqui embaixo.

A ideia, sem fórmula assustadora

Pega quatro pontos: dois nas pontas (onde a curva começa e termina) e dois no meio, que são os tais "controles" — eles puxam a curva na direção deles, como ímãs, mas a curva não passa por eles. É por isso que arrastar uma alcinha entorta a linha toda de um jeito tão orgânico.

O truque do De Casteljau é puro interpolação linear — ou seja, "andar uma fração do caminho entre dois pontos". Escolhe um valor t entre 0 e 1 (pensa nele como "quanto por cento do caminho já andei"):

  • Em cada segmento que liga dois pontos vizinhos, marco o ponto que está a t do caminho. Com 4 pontos, isso me dá 3 pontos novos.
  • Ligo esses 3 pontos novos e repito: marco o ponto a t em cada um dos 2 segmentos. Agora tenho 2 pontos.
  • Ligo esses 2 e marco mais uma vez o ponto a t. Sobra um único ponto — e ele está, exatamente, em cima da curva.

Varia o t de 0 a 1 e esse ponto final desliza desenhando a curva inteira. É só isso. Nenhuma fórmula de polinômio cúbico decorada — só "ande uma fração do caminho", repetido em camadas. No brinquedo, mexa no slider do t e veja as linhas de construção (as camadas) se desenharem em cascata.

Por que isso está em todo lugar

Quando você entende Bézier, começa a vê-la em tudo:

  • Fontes. Toda letra que você está lendo agora é um monte de curvas de Bézier. Os formatos TrueType e PostScript/CFF guardam os glifos exatamente assim — pontos e alcinhas.
  • SVG e ilustração. O comando C num caminho SVG é, literalmente, uma Bézier cúbica. A "caneta" do Illustrator, do Figma, do Inkscape — todas desenham Bézier.
  • Animação. Aquela transição CSS que "começa devagar e acelera"? É uma Bézier. A função cubic-bezier() nada mais é que uma curva dessas, onde o eixo X é o tempo e o eixo Y é o progresso da animação. O brinquedo abaixo te entrega a string cubic-bezier() prontinha pra copiar.

A mesma curva que dá a forma do parachoque de um Renault dos anos 60 também faz o "ó" desta frase e suaviza o menu que abre no seu app favorito. Uma ideia, mil disfarces.

Duas curiosidades que eu acho geniais

  • A curva sempre fica "dentro" dos pontos. Existe uma propriedade chamada casco convexo: a curva nunca escapa do contorno fechado dos pontos de controle. Por isso, mesmo arrastando as alcinhas pra longe, a curva continua "comportada" — ótimo pra quem precisa garantir que um traçado não invada onde não deve.
  • Dá pra "quebrar" uma Bézier em duas sem mudar o desenho. O próprio passo do De Casteljau, parado num t qualquer, te dá os pontos de controle das duas metades da curva. É assim que editores fazem aquele "adicionar ponto no meio do traço" sem deformar nada.

Minha opinião honesta

Eu confesso que por anos tratei Bézier como caixa-preta: arrastava as alcinhas no Figma no chute até "ficar bonito". Quando finalmente sentei pra entender o De Casteljau, foi aquele clique gostoso de perceber que uma coisa que parecia mágica era, no fundo, simples e elegante. E é exatamente esse tipo de coisa que me faz gostar de programar: descascar a mágica e descobrir que tem uma ideia bonita embaixo — geralmente mais simples do que o medo deixava parecer.

Chega de papo, arrasta aí 👇

Aqui está o brinquedo. Arraste os quatro pontos (mouse, dedo ou teclado), mexa no t pra ver as linhas de construção do De Casteljau, ligue/desligue o polígono de controle e experimente os presets de easing. A string cubic-bezier() equivalente aparece prontinha pra copiar. Tudo vanilla, sem nenhuma biblioteca.

bezier.js
  • arraste os pontos
  • Tab selecionar ponto
  • mover ponto

Vanilla JS, sem bibliotecas. No celular, arraste com o dedo. Segure Shift com as setas pra mover mais rápido.

Se você arrastou os pontos até achar uma curva que te agradou — é mais ou menos assim que eu trabalho: pego uma curiosidade do dia a dia e transformo numa coisa que dá pra tocar e entender. Se você tem um projeto na cabeça — um produto, uma ferramenta interna, um site que precisa converter de verdade — eu adoraria ouvir. Bora trocar uma ideia?

Vamos conversar sobre seu projeto