private static List <PartT> CalculateDashesBezierT(TrajectoryPoints points, float dashLength, float spaceLength, uint iterations) { var startSpace = spaceLength / 2; for (var i = 0; ;) { var parts = new List <PartT>(); var isPart = false; var prevI = 0; var currentI = 0; var currentT = 0f; var nextT = points.Find(currentI, startSpace, out var nextI); while (nextI < points.Length) { if (isPart) { parts.Add(new PartT() { Start = currentT, End = nextT }); } isPart = !isPart; prevI = currentI; currentI = nextI; currentT = nextT; nextT = points.Find(currentI, isPart ? dashLength : spaceLength, out nextI); } var endSpace = (points[points.Length - 1] - points[isPart ? prevI : currentI]).magnitude; i += 1; if (i >= iterations || Mathf.Abs(startSpace - endSpace) / (startSpace + endSpace) < 0.05) { return(parts); } startSpace = (startSpace + endSpace) / 2; } }
public static List <PartT> CalculateDashesBezierT(IEnumerable <ITrajectory> trajectories, float dashLength, float spaceLength, uint iterations = 3) { var points = new TrajectoryPoints(trajectories.ToArray()); return(CalculateDashesBezierT(points, dashLength, spaceLength, iterations)); }
public static List <PartT> CalculateDashesBezierT(BezierTrajectory trajectory, float dashLength, float spaceLength, uint iterations = 3) { var points = new TrajectoryPoints(trajectory); return(CalculateDashesBezierT(points, dashLength, spaceLength, iterations)); }