Exemple #1
0
        /// <summary>
        /// Non Rational B-Spline curve point
        /// </summary>
        /// <param name="u">interval parameter 0 ≦ u ≦ 1</param>
        /// <returns></returns>
        public GPoint NonRationalBSpline(double u)
        {
            int span = NURBS.FindSpan(Degree, u, KnotVector);

            double[] basisFuns = NURBS.BasisFuns(span, Degree, KnotVector, u);
            double   x         = 0.0;
            double   y         = 0.0;

            for (int i = 0; i <= Degree; i++)
            {
                x += basisFuns[i] * ControlPoints[span - Degree + i].X;
                y += basisFuns[i] * ControlPoints[span - Degree + i].Y;
            }

            return(new GPoint(x, y));
        }
Exemple #2
0
        /// <summary>
        /// Rational B-Splines (NURBS) curve
        /// </summary>
        /// <param name="u">interval parameter 0 ≦ u ≦ 1</param>
        /// <returns>curve point at u</returns>
        public GPoint RationalBSpline(double u)
        {
            int span = NURBS.FindSpan(Degree, u, KnotVector);

            double[] basisFuns = NURBS.BasisFuns(span, Degree, KnotVector, u);// CalcBasisFuns(span, u);

            double x = 0;
            double y = 0;
            double rationalWeight = 0.0;

            for (int i = 0; i <= Degree; i++)
            {
                GPoint cp = ControlPoints[span - Degree + i];
                x += basisFuns[i] * cp.X * cp.W;
                y += basisFuns[i] * cp.Y * cp.W;
                rationalWeight += basisFuns[i] * cp.W;
            }

            return(new GPoint(x / rationalWeight, y / rationalWeight));
        }