diff options
| author | Raul Santos <raulsntos@gmail.com> | 2022-11-24 17:51:34 +0100 | 
|---|---|---|
| committer | Raul Santos <raulsntos@gmail.com> | 2022-11-24 17:55:07 +0100 | 
| commit | d2f731471621ddd153b4943a9a885c2dff084e4c (patch) | |
| tree | 28beebce9d89b34daefb94d03fb13e37982ca5cb | |
| parent | cd3d6e63a630414297cb580bcc891a0aa9f25127 (diff) | |
C#: Implement BezierDerivative
Adds `BezierDerivative` method to Mathf, Vector2 and Vector3 (already exposed in Core).
3 files changed, 59 insertions, 3 deletions
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs index f2667c6807..3f9e986f62 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs @@ -282,7 +282,7 @@ namespace Godot          /// <summary>          /// Returns the point at the given <paramref name="t"/> on a one-dimensional Bezier curve defined by -        /// the given <paramref name="control1"/>, <paramref name="control2"/> and <paramref name="end"/> points. +        /// the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points.          /// </summary>          /// <param name="start">The start value for the interpolation.</param>          /// <param name="control1">Control point that defines the bezier curve.</param> @@ -303,6 +303,27 @@ namespace Godot          }          /// <summary> +        /// Returns the derivative at the given <paramref name="t"/> on a one dimensional Bezier curve defined by +        /// the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points. +        /// </summary> +        /// <param name="start">The start value for the interpolation.</param> +        /// <param name="control1">Control point that defines the bezier curve.</param> +        /// <param name="control2">Control point that defines the bezier curve.</param> +        /// <param name="end">The destination value for the interpolation.</param> +        /// <param name="t">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param> +        /// <returns>The resulting value of the interpolation.</returns> +        public static real_t BezierDerivative(real_t start, real_t control1, real_t control2, real_t end, real_t t) +        { +            // Formula from Wikipedia article on Bezier curves +            real_t omt = 1 - t; +            real_t omt2 = omt * omt; +            real_t t2 = t * t; + +            real_t d = (control1 - start) * 3 * omt2 + (control2 - control1) * 6 * omt * t + (end - control2) * 3 * t2; +            return d; +        } + +        /// <summary>          /// Converts an angle expressed in degrees to radians.          /// </summary>          /// <param name="deg">An angle expressed in degrees.</param> diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs index 535391f447..b11778194a 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs @@ -240,7 +240,7 @@ namespace Godot          /// <summary>          /// Returns the point at the given <paramref name="t"/> on a one-dimensional Bezier curve defined by this vector -        /// and the given <paramref name="control1"/>, <paramref name="control2"/> and <paramref name="end"/> points. +        /// and the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points.          /// </summary>          /// <param name="control1">Control point that defines the bezier curve.</param>          /// <param name="control2">Control point that defines the bezier curve.</param> @@ -260,6 +260,23 @@ namespace Godot          }          /// <summary> +        /// Returns the derivative at the given <paramref name="t"/> on the Bezier curve defined by this vector +        /// and the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points. +        /// </summary> +        /// <param name="control1">Control point that defines the bezier curve.</param> +        /// <param name="control2">Control point that defines the bezier curve.</param> +        /// <param name="end">The destination value for the interpolation.</param> +        /// <param name="t">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param> +        /// <returns>The resulting value of the interpolation.</returns> +        public readonly Vector2 BezierDerivative(Vector2 control1, Vector2 control2, Vector2 end, real_t t) +        { +            return new Vector2( +                Mathf.BezierDerivative(x, control1.x, control2.x, end.x, t), +                Mathf.BezierDerivative(y, control1.y, control2.y, end.y, t) +            ); +        } + +        /// <summary>          /// Returns the normalized vector pointing from this vector to <paramref name="to"/>.          /// </summary>          /// <param name="to">The other vector to point towards.</param> diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs index 53bd0b0908..7e31822d50 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs @@ -234,7 +234,7 @@ namespace Godot          /// <summary>          /// Returns the point at the given <paramref name="t"/> on a one-dimensional Bezier curve defined by this vector -        /// and the given <paramref name="control1"/>, <paramref name="control2"/> and <paramref name="end"/> points. +        /// and the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points.          /// </summary>          /// <param name="control1">Control point that defines the bezier curve.</param>          /// <param name="control2">Control point that defines the bezier curve.</param> @@ -254,6 +254,24 @@ namespace Godot          }          /// <summary> +        /// Returns the derivative at the given <paramref name="t"/> on the Bezier curve defined by this vector +        /// and the given <paramref name="control1"/>, <paramref name="control2"/>, and <paramref name="end"/> points. +        /// </summary> +        /// <param name="control1">Control point that defines the bezier curve.</param> +        /// <param name="control2">Control point that defines the bezier curve.</param> +        /// <param name="end">The destination value for the interpolation.</param> +        /// <param name="t">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param> +        /// <returns>The resulting value of the interpolation.</returns> +        public readonly Vector3 BezierDerivative(Vector3 control1, Vector3 control2, Vector3 end, real_t t) +        { +            return new Vector3( +                Mathf.BezierDerivative(x, control1.x, control2.x, end.x, t), +                Mathf.BezierDerivative(y, control1.y, control2.y, end.y, t), +                Mathf.BezierDerivative(z, control1.z, control2.z, end.y, t) +            ); +        } + +        /// <summary>          /// Returns the normalized vector pointing from this vector to <paramref name="to"/>.          /// </summary>          /// <param name="to">The other vector to point towards.</param>  |