Embora eu esteja de acordo com as respostas que você já obteve, quero adicionar um mecanismo de aproximação simples, mas poderoso, que você pode usar para qualquer curva de Bézier: Você subdivide continuamente a curva usando a subdivisão de Casteljau até a distância máxima dos pontos de controle de uma sub-curva para a linha de base da sub-curva está abaixo de algum epsilon constante . Nesse caso, a subcurva pode ser aproximada por sua linha de base.
De fato, acredito que essa é a abordagem geralmente adotada quando um subsistema gráfico precisa traçar uma curva de Bézier. Mas não me cite, não tenho referências em mãos no momento.
Na prática, será assim: (exceto que o idioma é irrelevante)
public static Line[] toLineStrip(BezierCurve bezierCurve, double epsilon) {
ArrayList<Line> lines = new ArrayList<Line>();
Stack<BezierCurve> parts = new Stack<BezierCurve>();
parts.push(bezierCurve);
while (!parts.isEmpty()) {
BezierCurve curve = parts.pop();
if (distanceToBaseline(curve) < epsilon) {
lines.add(new Line(curve.get(0), curve.get(1)));
} else {
parts.addAll(curve.split(0.5));
}
}
return lines.toArray(new Line[0]);
}