Advertisement
Why7090

Unity Bezier Curve Generator

Sep 3rd, 2016
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public static List<Vector2> generateBeizerCurve(float start, float end, Vector2 left, Vector2 right, Vector2 p1, Vector2 p2, Vector2 p3, float resolution) {
  2.         float middle = start + (end - start) / 2;
  3.  
  4.         Vector2 middleVector = left + (right - left) / 2;
  5.         Vector2 beizerCurve = calculateBeizerCurve(middle, p1, p2, p3);
  6.  
  7.         float difference = (beizerCurve - middleVector).magnitude;
  8.  
  9.         if (difference > resolution) {
  10.             List<Vector2> points = new List<Vector2>();
  11.  
  12.             List<Vector2> leftPoints  = generateBeizerCurve(start , middle, left       , beizerCurve, p1, p2, p3, resolution);
  13.             List<Vector2> rightPoints = generateBeizerCurve(middle, end   , beizerCurve, right      , p1, p2, p3, resolution);
  14.  
  15.             if (leftPoints != null)
  16.                 points.AddRange(leftPoints);
  17.             points.Add(beizerCurve);
  18.             if (rightPoints != null)
  19.                 points.AddRange(rightPoints);
  20.  
  21.             return points;
  22.         }
  23.  
  24.         return null;
  25.     }
  26.  
  27.     public static Vector2 calculateBeizerCurve(float t, Vector2 p1, Vector2 p2, Vector2 p3) {
  28.         return (1 - t) * (1 - t) * p1 + 2 * (1 - t) * t * p2 + t * t * p3;
  29.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement