BEPUphysics.Paths.FiniteDifferenceSpline3D.ComputeTangents C# (CSharp) Метод

ComputeTangents() защищенный Метод

protected ComputeTangents ( ) : void
Результат void
        protected override void ComputeTangents()
        {
            if (ControlPoints.Count == 1)
            {
                tangents.Add(Vector3.Zero);
                return;
            }
            if (ControlPoints.Count == 2)
            {
                Vector3 tangent = ControlPoints[1].Value - ControlPoints[0].Value;
                tangents.Add(tangent);
                tangents.Add(tangent);
                return;
            }

            Vector3 tangentA, tangentB;
            Vector3 previous, current, next;
            //First endpoint
            current = ControlPoints[0].Value;
            next = ControlPoints[1].Value;
            Vector3.Subtract(ref next, ref current, out tangentA);
            Vector3.Multiply(ref tangentA, .5f / (ControlPoints[1].Time - ControlPoints[0].Time), out tangentA);
            //Vector3.Multiply(ref current, .5f / (controlPoints[0].time), out tangentB);
            //Vector3.Add(ref tangentA, ref tangentB, out tangentA);
            tangents.Add(tangentA);

            for (int i = 1; i < ControlPoints.Count - 1; i++)
            {
                previous = current;
                current = next;
                next = ControlPoints[i + 1].Value;
                Vector3.Subtract(ref next, ref current, out tangentA);
                Vector3.Subtract(ref current, ref previous, out tangentB);
                Vector3.Multiply(ref tangentA, .5f / (ControlPoints[i + 1].Time - ControlPoints[i].Time), out tangentA);
                Vector3.Multiply(ref tangentB, .5f / (ControlPoints[i].Time - ControlPoints[i - 1].Time), out tangentB);
                Vector3.Add(ref tangentA, ref tangentB, out tangentA);
                tangents.Add(tangentA);
            }

            previous = current;
            current = next;
            Vector3.Negate(ref current, out tangentA);
            Vector3.Subtract(ref current, ref previous, out tangentB);
            int currentIndex = ControlPoints.Count - 1;
            int previousIndex = currentIndex - 1;
            //Vector3.Multiply(ref tangentA, .5f / (-controlPoints[currentIndex].time), out tangentA);
            Vector3.Multiply(ref tangentB, .5f / (ControlPoints[currentIndex].Time - ControlPoints[previousIndex].Time), out tangentB);
            //Vector3.Add(ref tangentA, ref tangentB, out tangentA);
            tangents.Add(tangentB);
        }
    }