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
tdo caminho. Com 4 pontos, isso me dá 3 pontos novos. - Ligo esses 3 pontos novos e repito: marco o ponto a
tem 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
Cnum 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 stringcubic-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
tqualquer, 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.