Exemplo n.º 1
0
        /// <summary>
        /// gets the first derivative for a cubic bezier
        /// </summary>
        /// <returns>The first derivative.</returns>
        /// <param name="start">P0.</param>
        /// <param name="firstControlPoint">P1.</param>
        /// <param name="secondControlPoint">P2.</param>
        /// <param name="end">P3.</param>
        /// <param name="t">T.</param>
        public static Vector2 GetFirstDerivative(Vector2 start, Vector2 firstControlPoint, Vector2 secondControlPoint, Vector2 end, float t)
        {
            t = NumericHelper.Clamp01(t);
            var oneMinusT = 1f - t;

            return(3f * oneMinusT * oneMinusT * (firstControlPoint - start) +
                   6f * oneMinusT * t * (secondControlPoint - firstControlPoint) +
                   3f * t * t * (end - secondControlPoint));
        }
Exemplo n.º 2
0
        /// <summary>
        /// evaluate quadratic bezier
        /// </summary>
        /// <returns>The point.</returns>
        /// <param name="p0">P0.</param>
        /// <param name="p1">P1.</param>
        /// <param name="p2">P2.</param>
        /// <param name="t">T.</param>
        public static Vector2 GetPoint(Vector2 p0, Vector2 p1, Vector2 p2, float t)
        {
            t = NumericHelper.Clamp01(t);
            var oneMinusT = 1f - t;

            return(oneMinusT * oneMinusT * p0 +
                   2f * oneMinusT * t * p1 +
                   t * t * p2);
        }
Exemplo n.º 3
0
        /// <summary>
        /// evaluate a cubic bezier
        /// </summary>
        /// <returns>The point.</returns>
        /// <param name="start">P0.</param>
        /// <param name="firstControlPoint">P1.</param>
        /// <param name="secondControlPoint">P2.</param>
        /// <param name="end">P3.</param>
        /// <param name="t">T.</param>
        public static Vector2 GetPoint(Vector2 start, Vector2 firstControlPoint, Vector2 secondControlPoint, Vector2 end, float t)
        {
            t = NumericHelper.Clamp01(t);
            var oneMinusT = 1f - t;

            return(oneMinusT * oneMinusT * oneMinusT * start +
                   3f * oneMinusT * oneMinusT * t * firstControlPoint +
                   3f * oneMinusT * t * t * secondControlPoint +
                   t * t * t * end);
        }
        /// <summary>
        /// helper that gets the bezier point index at time t. t is modified in the process to be in the range of the curve segment.
        /// </summary>
        /// <returns>The index at time.</returns>
        /// <param name="t">T.</param>
        private int PointIndexAtTime(ref float t)
        {
            int i;

            if (t >= 1f)
            {
                t = 1f;
                i = points.Length - 4;
            }
            else
            {
                t  = NumericHelper.Clamp01(t) * curveCount;
                i  = (int)t;
                t -= i;
                i *= 3;
            }

            return(i);
        }