Пример #1
0
    Vector3 getGradientAtT(float t)
    {
        int i0 = 0, i1 = 0, i2 = 0, i3 = 0;  // indices

        if (closed)
        {
            i0 = ((int)t) % points.Count;

            int add = (int)t;
            if (curveType == CurveType.Bezier && add >= 1)
            {
                i0 = (3 * add) % points.Count;
            }

            i1 = (i0 + 1) % points.Count;
            i2 = (i1 + 1) % points.Count;
            i3 = (i2 + 1) % points.Count;
        }
        else
        {
            i0 = 0;
            i1 = 1;
            i2 = 2;
            i3 = 3;
        }
        // Debug.Log("i0 " + i0 + ", i1 " + i1 + ", i2 " + i2 + ", i3 " + i3);

        CurveSegment csX = new CurveSegment(curveType, points[i0].position.x, points[i1].position.x, points[i2].position.x, points[i3].position.x);
        CurveSegment csY = new CurveSegment(curveType, points[i0].position.y, points[i1].position.y, points[i2].position.y, points[i3].position.y);
        CurveSegment csZ = new CurveSegment(curveType, points[i0].position.z, points[i1].position.z, points[i2].position.z, points[i3].position.z);

        float   dv_x = csX.EvaluateDv(t);
        float   dv_y = csY.EvaluateDv(t);
        float   dv_z = csZ.EvaluateDv(t);
        Vector3 dv_p = new Vector3(dv_x, dv_y, dv_z);

        //Vector2 dv_p = new Vector2(dv_x, dv_y);
        return(dv_p);
    }