Make bezier approximator slightly more correct (without affecting its behaviour).

This commit is contained in:
Thomas Müller 2016-12-09 18:03:17 +01:00
parent 068b413225
commit 359cb5ac6a
1 changed files with 2 additions and 3 deletions

View File

@ -13,7 +13,7 @@ public class BezierApproximator
private Vector2[] subdivisionBuffer1;
private Vector2[] subdivisionBuffer2;
private const float TOLERANCE = 0.5f;
private const float TOLERANCE = 0.25f;
private const float TOLERANCE_SQ = TOLERANCE * TOLERANCE;
public BezierApproximator(List<Vector2> controlPoints)
@ -36,7 +36,7 @@ public BezierApproximator(List<Vector2> controlPoints)
private static bool IsFlatEnough(Vector2[] controlPoints)
{
for (int i = 1; i < controlPoints.Length - 1; i++)
if ((controlPoints[i - 1] - 2 * controlPoints[i] + controlPoints[i + 1]).LengthSquared > TOLERANCE_SQ)
if ((controlPoints[i - 1] - 2 * controlPoints[i] + controlPoints[i + 1]).LengthSquared > TOLERANCE_SQ * 4)
return false;
return true;
@ -96,7 +96,6 @@ private void Approximate(Vector2[] controlPoints, List<Vector2> output)
/// Creates a piecewise-linear approximation of a bezier curve, by adaptively repeatedly subdividing
/// the control points until their approximation error vanishes below a given threshold.
/// </summary>
/// <param name="controlPoints">The control points describing the curve.</param>
/// <returns>A list of vectors representing the piecewise-linear approximation.</returns>
public List<Vector2> CreateBezier()
{