Degree elevation

The following is easy to verify:

	(Subscript[B, i]^n) = ((n+1-i)/(n+1))(Subscript[B, i]^(n+1)) + ((i+1)/(n+1))(Subscript[B, i+1]^(n+1)).
	
Thus
	(∑_(i=0)^n)(Subscript[B, i]^n)(Subscript[b, i]) = (∑_(i=0)^n)[((n+1-i)/(n+1))(Subscript[B, i]^(n+1))+((i+1)/(n+1))(Subscript[B, i+1]^(n+1)) ](Subscript[b, i])
	
		     =(∑_(i=0)^n)((n+1-i)/(n+1))(Subscript[B, i]^(n+1))(Subscript[b, i])+ (∑_(i=0)^n)((i+1)/(n+1))(Subscript[B, i+1]^(n+1)) (Subscript[b, i])
		     
		     = (∑_(i=0)^(n+1))((n+1-i)/(n+1))(Subscript[B, i]^(n+1))(Subscript[b, i])+ (∑_(i=1)^(n+1))(i/(n+1))(Subscript[B, i]^(n+1)) (Subscript[b, i-1])
		      
		       = (∑_(i=0)^(n+1))((n+1-i)/(n+1))(Subscript[B, i]^(n+1))(Subscript[b, i])+ (∑_(i=0)^(n+1))(i/(n+1)) (Subscript[B, i]^(n+1))(Subscript[b, i-1])
		      
		      = (∑_(i=0)^(n+1)) [((n+1-i)/(n+1))(Subscript[b, i])+ (i/(n+1)) (Subscript[b, i-1])](Subscript[B, i]^(n+1))

A Bezier polygon is given in the array b. An array elev is filled row by row by successively degree elevted control polygons, taking care of the beginning and ending control points separately. The number of rows in elev is k, meaning we are doing k-1 degree elevations. You'll see that degree elevation is a poor process for approximating the curve.

b={{0,0,0},{1,0,0},{1,0,1},{1,1,1}(*,{1,1,0},{0,1,0}*)};
n=Length[b]-1;
k=20;

elev=Table[{0.0,0.0,0.0},{i,1,k},{j,1,n+k}];
Do[elev[[1,j]]=b[[j]],{j,1,n+1}];

Do[elev[[i,1]]=b[[1]],{i,1,k}];
Do[elev[[i,n+i]]=b[[n+1]],{i,2,k}];

Do[elev[[i]][[j]]=((j-1.0)*elev[[i-1,j-1]]+(n+i-j)*elev[[i-1,j]])/(n+i-1.0),{i,2,k},{j,2,n+i-1}];

curve=Graphics3D[{Thick,BezierCurve[b,SplineDegree-> n]}];
poly=Graphics3D[{Thick,Green,Line[b]}];
points=Graphics3D[{PointSize[Large],Point[b]}];

allpolys=Graphics3D[{Line[Table[elev[[i]],{i,2,k}]]}];

Show[{poly,curve,points,allpolys},Boxed-> False]