示例#1
0
    private void fillBeziers()
    {
        beziers = new Bezier <T> [controlPoints.Length];

        Bezier <T> first = new Bezier <T>();

        first.b0 = controlPoints[0];
        first.b1 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[1], controlPoints[0])), (1f / 3f)), controlPoints[0]);

        first.b2 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[1], controlPoints[0])), (2f / 3f)), controlPoints[0]);

        beziers[0] = first;

        Bezier <T> last = new Bezier <T>();

        last.b1 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[0], controlPoints[controlPoints.Length - 1])), (1f / 3f)), controlPoints[controlPoints.Length - 1]);

        last.b2 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[0], controlPoints[controlPoints.Length - 1])), (2f / 3f)), controlPoints[controlPoints.Length - 1]);

        last.b3 = controlPoints[0];
        beziers[beziers.Length - 1] = last;

        for (int i = 1; i < beziers.Length - 1; i++)
        {
            beziers[i]    = new Bezier <T>();
            beziers[i].b1 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[i + 1], controlPoints[i])), (1f / 3f)), controlPoints[i]);

            beziers[i].b2 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(controlPoints[i + 1], controlPoints[i])), (2f / 3f)), controlPoints[i]);
        }

        beziers[beziers.Length - 1].b3 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(beziers[0].b1, beziers[beziers.Length - 1].b2)), 0.5f), beziers[beziers.Length - 1].b2);

        beziers[0].b0 = beziers[beziers.Length - 1].b3;

        for (int i = 0; i < beziers.Length - 1; i++)
        {
            beziers[i].b3 = TUtils <T> .Additate(TUtils <T> .Scalar((TUtils <T> .Subtract(beziers[i + 1].b1, beziers[i].b2)), 0.5f), beziers[i].b2);

            beziers[i + 1].b0 = beziers[i].b3;
        }
    }