Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }