Хоча я згоден з відповідями, які ви вже отримали, я хочу додати простий, але потужний механізм наближення, який ви можете використовувати для будь-яких ступенів кривих Безьє: Ви постійно підрозділяєте криву, використовуючи підрозділ де Кастелау до максимальної відстані контрольних точок. підкривої до базової лінії підкривої знаходиться нижче деякого постійного епсилона . У цьому випадку субкрива може бути апроксимована за її базовою лінією.
Насправді, я вважаю, що такий підхід зазвичай застосовується, коли графічна підсистема повинна провести криву Безьє. Але не цитуйте мене з цього приводу, на даний момент у мене немає посилань.
На практиці це виглядатиме так: (крім мови не має значення)
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]);
}