/// <summary> /// Uniform B-spline /// </summary> /// <param name="degree"></param> /// <param name="numControlPoints"></param> /// <returns></returns> public static KnotSet CreateToUniform(int degree, int numControlPoints) { // knot length = degree + 1 + control points // knot length = degree + order var knots = new List <double>(); double[] normalizedKnots = null; int order = degree + 1; int knotCount = order + numControlPoints; for (int i = 0; i < knotCount; i++) { if (i < order) { knots.Add(0); } else if (order <= i && i <= knotCount - order) { knots.Add(knots.Last() + 1); } else { knots.Add(knots.Last()); } } double max = knots.Last(); normalizedKnots = knots.Select(n => n / max).ToArray(); KnotSet knotSet = new KnotSet(normalizedKnots); return(knotSet); }
public object Clone() { KnotSet clone = (KnotSet)MemberwiseClone(); clone.knotVector = knotVector.ToArray(); return(clone); }