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