Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class BezierCurve
- {
- public Vector2[] ControlPoints { get; set; }
- public BezierCurve(Vector2[] controlPoints)
- {
- ControlPoints = controlPoints;
- }
- public Vector2 Evaluate(float t)
- {
- if (ControlPoints == null)
- {
- return Vector2.zero;
- }
- var result = Vector2.zero;
- int n = ControlPoints.Length;
- for (int i = 0; i < n; i++)
- {
- result += ControlPoints[i] * Bernstein(n - 1, i, t);
- }
- return result;
- }
- static float Bernstein(int n, int i, float t)
- {
- return Binomial(n, i) * Mathf.Pow(t, i) * Mathf.Pow(1 - t, n - i);
- }
- static float Binomial(int n, int k)
- {
- return Factorial(n) / (Factorial(k) * Factorial(n - k));
- }
- static float Factorial(int a)
- {
- float result = 1f;
- for (int i = 2; i <= a; i++)
- {
- result *= i;
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement