Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class BezierCurve
  4. {
  5.  
  6. public Vector2[] ControlPoints { get; set; }
  7.  
  8. public BezierCurve(Vector2[] controlPoints)
  9. {
  10. ControlPoints = controlPoints;
  11. }
  12.  
  13. public Vector2 Evaluate(float t)
  14. {
  15. if (ControlPoints == null)
  16. {
  17. return Vector2.zero;
  18. }
  19.  
  20. var result = Vector2.zero;
  21. int n = ControlPoints.Length;
  22. for (int i = 0; i < n; i++)
  23. {
  24. result += ControlPoints[i] * Bernstein(n - 1, i, t);
  25. }
  26.  
  27. return result;
  28. }
  29.  
  30. static float Bernstein(int n, int i, float t)
  31. {
  32. return Binomial(n, i) * Mathf.Pow(t, i) * Mathf.Pow(1 - t, n - i);
  33. }
  34.  
  35. static float Binomial(int n, int k)
  36. {
  37. return Factorial(n) / (Factorial(k) * Factorial(n - k));
  38. }
  39.  
  40. static float Factorial(int a)
  41. {
  42. float result = 1f;
  43. for (int i = 2; i <= a; i++)
  44. {
  45. result *= i;
  46. }
  47.  
  48. return result;
  49. }
  50.  
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement