Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        public object Clone()
        {
            KnotSet clone = (KnotSet)MemberwiseClone();

            clone.knotVector = knotVector.ToArray();

            return(clone);
        }