Poli.school
Curvas

Curvas de Bézier

Veja como desenhar curvas suaves usando pontos de controle

A curva de Bézier é uma curva suave definida por dois pontos de ancoragem, por onde a curva efetivamente passa, e dois pontos de controle, que determinam a direção e a intensidade da curvatura. No p5.js, ela é criada com o comando bezier().

O comando bezier(x1, y1, x2, y2, x3, y3, x4, y4) recebe oito parâmetros. Os dois primeiros (x1, y1) definem o primeiro ponto de ancoragem, onde a curva começa. Os dois últimos (x4, y4) definem o segundo ponto de ancoragem, onde a curva termina. Os quatro parâmetros do meio (x2, y2, x3, y3) definem os dois pontos de controle, que puxam a curva em sua direção sem que ela chegue a tocá-los.

Estrutura básica

Código - estrutura geral para definição de curvas de Bézier no p5.js
bezier(x1, y1, x2, y2, x3, y3, x4, y4);

Exemplo

Para um exemplo de como utilizar esse comando, teste o Código e veja a curva formada.

Código - Exemplo de definição de uma curva de Bézier
function setup() {
  createCanvas(800,600);
  noFill();
  strokeWeight(3);
  bezier(100, 500, 200, 100, 600, 100, 700, 500);
}
Carregando sketch…
A curva de Bézier nunca toca os pontos de controle, apenas é atraída por eles. Ao desenhar uma curva pela primeira vez, é comum não saber exatamente onde os pontos de controle devem ficar, o que torna útil visualizá-los diretamente no sketch enquanto ela é ajustada.

Visualizando os pontos de controle

Desenhar os pontos de ancoragem, os pontos de controle e as linhas que os conectam ajuda a entender como cada um influencia o formato final da curva.

Código - Exemplo com os pontos de controle visíveis
function setup() {
  createCanvas(800,600);
  let x1 = 100, y1 = 500;
  let x2 = 200, y2 = 100;
  let x3 = 600, y3 = 100;
  let x4 = 700, y4 = 500;

  noFill();
  strokeWeight(3);
  bezier(x1, y1, x2, y2, x3, y3, x4, y4);

  stroke(200,0,0);
  strokeWeight(1);
  line(x1, y1, x2, y2);
  line(x3, y3, x4, y4);

  noStroke();
  fill(200,0,0);
  ellipse(x2, y2, 10, 10);
  ellipse(x3, y3, 10, 10);

  fill(0,100,200);
  ellipse(x1, y1, 10, 10);
  ellipse(x4, y4, 10, 10);
}
Carregando sketch…

Experimente usar bezierVertex() dentro de beginShape() e endShape() para encadear várias curvas de Bézier em sequência, formando contornos complexos e orgânicos, como os usados em ilustração vetorial. As funções bezierPoint() e bezierTangent() também permitem calcular posições e direções específicas ao longo da curva, úteis para animar objetos que devem seguir seu trajeto. Mais detalhes e exemplos podem ser encontrados na documentação do p5.js.

Copyright © 2026