package com.xenoage.zong.musiclayout.layouter.curvedline; import java.util.List; import com.xenoage.utils.math.QuadraticCurve; import com.xenoage.utils.math.VSide; import com.xenoage.utils.math.geom.ConvexHull; import com.xenoage.utils.math.geom.Point2f; import com.xenoage.zong.util.math.BezierCurveTools; import com.xenoage.zong.util.math.CubicBezierCurve; import com.xenoage.zong.util.math.QuadraticCurvesTools; /** * Default implementation for a {@link CurvedLineStrategy}. * * @author Andreas Wenger */ public class DefaultCurvedLineStrategy implements CurvedLineStrategy { public static final float ENDPOINT_TOLERANCE_LP = 6; @Override public CubicBezierCurve computeCurvedLine(List<Point2f> points, VSide side) { ConvexHull convexHull = ConvexHull.create(points, side); List<QuadraticCurve> quadCurves = QuadraticCurvesTools.computeOverConvexHull( convexHull, ENDPOINT_TOLERANCE_LP, ENDPOINT_TOLERANCE_LP); QuadraticCurve bestQuadCurve = QuadraticCurvesTools.getBestCurve(quadCurves, convexHull); CubicBezierCurve bestBezierCurve = BezierCurveTools.computeBezierFrom( bestQuadCurve, points.get(0).x, points.get(points.size() - 1).x); bestBezierCurve = BezierCurveTools.correctBezier(bestBezierCurve, side); return bestBezierCurve; } }