Editor/PaintCurves.cs
using Editor;
using System.Collections.Generic;
namespace AltCurves;
public static class PaintCurves
{
/// <summary>
/// Paint.DrawLine along a cubic bezier curve
/// </summary>
public static void DrawCubicBezier( Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, int steps = 15 )
{
var points = new List<Vector2>( steps );
for ( int i = 0; i < steps; i++ )
{
var t = i / (float)(steps - 1);
points.Add( CalcCubicBezier2D( t, p0, p1, p2, p3 ) );
}
Paint.DrawPoints( points );
}
private static Vector2 CalcCubicBezier2D( float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3 )
{
var p01 = Vector2.Lerp( p0, p1, t );
var p12 = Vector2.Lerp( p1, p2, t );
var p23 = Vector2.Lerp( p2, p3, t );
var p012 = Vector2.Lerp( p01, p12, t );
var p123 = Vector2.Lerp( p12, p23, t );
return Vector2.Lerp( p012, p123, t );
}
}