コード例 #1
0
        public Vector2d GetDegreePoint(long degree)
        {
            if (Points.Length == 1)
            {
                return(Points[0]);

                ;
            }
            else if (Points.Length <= 0)
            {
                return(Vector2d.zero);

                ;
            }

            if (Looped)
            {
                degree = degree.Mod(FixedMath.One);
            }
            else
            {
                if (degree < 0)
                {
                    degree = 0;
                }
                if (degree > FixedMath.One)
                {
                    degree = FixedMath.One;
                }
            }


            //TODO: Degree guards

            long degreeMag   = TotalLength.Mul(degree);
            long distanceAcc = 0;

            for (int i = 0; i < PointDistances.Length; i++)
            {
                long curDistance     = PointDistances [i];
                long nextDistanceAcc = distanceAcc + curDistance;
                if (nextDistanceAcc >= degreeMag)
                {
                    long fraction = (degreeMag - distanceAcc).Div(curDistance);
                    long index1   = i;
                    long index2   = i + 1;
                    if (index2 >= Points.Length)
                    {
                        index2 = 0;
                    }
                    Vector2d ret = Points [index1].Lerped(Points [index2], fraction);
                    return(ret + Offset);
                }
                distanceAcc = nextDistanceAcc;
            }
            throw new System.Exception();
        }