/// <summary> /// We want to convert the periodic formulation into a non periodic formulation. To do /// this we follow the instructions from Guilia at DevDept. /// /// the things that need to be done to get the correct curve in Eyeshot are: /// - add one last control point equal to the first to close the curve /// - multiply the(x, y, z) coordinates of each control point by its w coordinate /// - the degree p of your curve is given by the multiplicity of the last knot in the periodic knot vector, therefore you need to increase by 1 the multiplicity of the last knot, and by p the multiplicity of the first knot. /// </summary> /// <param name="controlPoints4D"></param> /// <param name="knotArray"></param> /// <param name="degree"></param> private static void ConvertToNonPeriodic(ref Vector4[] controlPoints4D, ref double[] knotArray, int degree) { controlPoints4D = controlPoints4D.EndWith(controlPoints4D.First()).ToArray(); var last = knotArray.Last(); var first = knotArray.First(); knotArray = Enumerable.Repeat(first, degree).Concat(knotArray).EndWith(last).ToArray(); // We need to do some special handling to make it non periodic }