public double[] ParameterAt(double u, double v)
        {
            // u
            int n = GetUCount() - 1;
            // v
            int m = GetVCount() - 1;

            Point3d accumulation = new Point3d(0, 0, 0);

            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= m; j++)
                {
                    BasisInfo info1 = new BezierBasisInfo(n, i);
                    BasisInfo info2 = new BezierBasisInfo(m, j);

                    Func <double, double> basis1 = GetBasisFunction(info1);
                    Func <double, double> basis2 = GetBasisFunction(info2);
                    Point3d pt = this.pointsGrid[i][j];

                    accumulation += pt * basis1(u) * basis2(v);
                }
            }

            return(new double[] { accumulation.X, accumulation.Y, accumulation.Z });
        }
Exemple #2
0
        protected override Func <double, double> GetBasisFunction(BasisInfo _info)
        {
            BezierBasisInfo info = (BezierBasisInfo)_info;

            int n = info.N;
            int i = info.I;

            Func <double, double> func = (t) => MathTool.GetBinomialCoefficient(n, i) * Math.Pow(t, i) * Math.Pow(1 - t, n - i);

            return(func);
        }
Exemple #3
0
        public double[] ParameterAt(double t)
        {
            int     n      = points.Length - 1;
            Point3d result = new Point3d(0, 0, 0);

            for (int i = 0; i <= n; i++)
            {
                Point3d               pt    = points[i];
                BasisInfo             info  = new BezierBasisInfo(n, i);
                Func <double, double> basis = this.GetBasisFunction(info);
                double val = basis(t);

                result += val * pt;
            }

            return(new double[] { result.X, result.Y, result.Z });
        }