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; } }