Skip to content

Instantly share code, notes, and snippets.

@fumobox
Created June 8, 2019 05:17
Show Gist options
  • Save fumobox/eb5adc3f7d7b16b1b2a3a2c1706a717e to your computer and use it in GitHub Desktop.
Save fumobox/eb5adc3f7d7b16b1b2a3a2c1706a717e to your computer and use it in GitHub Desktop.
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment