public float[] SolveTimeFromX(float x, float eps = 1.0E-4F) { float a0 = P0.x - x; float a1 = 3 * (-P0.x + P1.x); float a2 = 3 * (P0.x - 2 * P1.x + P2.x); float a3 = -P0.x + P3.x + 3 * (P1.x - P2.x); double[] solution = EquationUtil.SolveCubic(a3, a2, a1, a0); return((from d in solution where (0 - eps <= d && d <= 1 + eps)select(float) d).Distinct().ToArray()); }
public float[] SolveTimeFromX(float x, float eps = 1.0E-4F) { float a0 = P0.x - x; float a1 = 3 * (-P0.x + P1.x); float a2 = 3 * (P0.x - 2 * P1.x + P2.x); float a3 = -P0.x + P3.x + 3 * (P1.x - P2.x); double[] solution = EquationUtil.SolveCubic(a3, a2, a1, a0); var set = new HashSet <float>(); foreach (double d in solution) { if (0.0 - eps <= d && d <= 1.0 + eps) { set.Add((float)d); } } return(set.ToArray()); }