Zaten aldığınız cevapları benimsediğimde, herhangi bir derece Bézier eğrisi için kullanabileceğiniz basit ama güçlü bir yaklaşım mekanizması eklemek istiyorum: Kontrol noktasının maksimum mesafesine kadar de Casteljau alt bölmesini kullanarak eğriyi sürekli olarak bölüyorsunuz alt eğrinin taban çizgisine giden bir alt eğrinin bir kısmı sabit epsilonun altındadır . Bu durumda, alt eğri taban çizgisine göre yaklaştırılabilir.
Aslında, bunun bir grafik altsisteminin bir Bézier eğrisi çizmesi gerektiğinde, genellikle uygulanan yaklaşım olduğuna inanıyorum. Ama benden alıntı yapma, şu anda elimde referans yok.
Uygulamada şöyle görünecektir: (dilin alakasız olması dışında)
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]);
}