public ValueAndDerivative GetValueAndDerivative(float t, Vector3[] precalculatedValues) { ValueAndDerivative v = new ValueAndDerivative(); v.Value = Vector3.zero; v.Derivative = Vector3.zero; int n = Points.Count - 1; for (int i = 0; i < Points.Count; ++i) { v.Value += precalculatedValues[i] * Mathf.Pow(t, (float)i); if (i < Points.Count - 1) { v.Derivative += (Points[i + 1] - Points[i]) * GetCoefficient(n - 1, i) * Mathf.Pow(t, (float)i) * Mathf.Pow(1.0f - t, (float)(n - 1 - i)); } } v.Derivative *= (float)Points.Count; return(v); }
public ValueAndDerivative GetValueAndDerivative(float t, Vector3[] precalculatedValues) { ValueAndDerivative v = new ValueAndDerivative(); v.Value = Vector3.zero; v.Derivative = Vector3.zero; int n = Points.Count - 1; for (int i = 0; i < Points.Count; ++i) { v.Value += precalculatedValues[i] * Mathf.Pow(t, (float)i); if (i < Points.Count - 1) { v.Derivative += (Points[i + 1] - Points[i]) * GetCoefficient(n - 1, i) * Mathf.Pow(t, (float)i) * Mathf.Pow(1.0f - t, (float)(n - 1 - i)); } } v.Derivative *= (float)Points.Count; return v; }