OpenTK.BezierCurve.CalculatePointOfDerivative C# (CSharp) Méthode

CalculatePointOfDerivative() private static méthode

Calculates the point with the specified t of the derivative of the given bezier function.
private static CalculatePointOfDerivative ( IList points, float t ) : System.Vector2
points IList The points.
t float The t parameter, value between 0.0f and 1.0f.
Résultat System.Vector2
        private static Vector2 CalculatePointOfDerivative(IList<Vector2> points, float t)
        {
            Vector2 r = new Vector2();
            double c = 1.0d - (double)t;
            float temp;
            int i = 0;
            foreach (Vector2 pt in points)
            {
                temp = (float)MathHelper.BinomialCoefficient(points.Count - 2, i) * (float)(System.Math.Pow(t, i) *
                        System.Math.Pow(c, (points.Count - 2) - i));
                r.X += temp * pt.X;
                r.Y += temp * pt.Y;
                i++;
            }

            return r;
        }

Usage Example

        /// <summary>
        /// Calculates the point on the given bezier curve with the specified t parameter.
        /// </summary>
        /// <param name="points">The points.</param>
        /// <param name="t">The t parameter, a value between 0.0f and 1.0f.</param>
        /// <param name="parallel">The parallel value.</param>
        /// <returns>Resulting point.</returns>
        /// <remarks>The <paramref name="parallel"/> parameter defines whether the curve should be calculated as a
        /// parallel curve to the original bezier curve. A value of 0.0f represents
        /// the original curve, 5.0f represents a curve that has always a distance
        /// of 5.0f to the orignal curve.</remarks>
        public static Vector2 CalculatePoint(IList <Vector2> points, float t, float parallel)
        {
            Vector2 r = new Vector2();
            double  c = 1.0d - (double)t;
            float   temp;
            int     i = 0;

            foreach (Vector2 pt in points)
            {
                temp = (float)MathHelper.BinomialCoefficient(points.Count - 1, i) * (float)(System.Math.Pow(t, i) *
                                                                                            System.Math.Pow(c, (points.Count - 1) - i));

                r.X += temp * pt.X;
                r.Y += temp * pt.Y;
                i++;
            }

            if (parallel == 0.0f)
            {
                return(r);
            }

            Vector2 perpendicular = new Vector2();

            if (t != 0.0f)
            {
                perpendicular = r - BezierCurve.CalculatePointOfDerivative(points, t);
            }
            else
            {
                perpendicular = points[1] - points[0];
            }

            return(r + Vector2.Normalize(perpendicular).PerpendicularRight *parallel);
        }
All Usage Examples Of OpenTK.BezierCurve::CalculatePointOfDerivative