> # Boehm Algorithmus > restart: with(plots): with(linalg): > boehm:=proc(degree,coeff,knot,x) > # degree Grad der Splinekurve > # coeff eine Koordinate der Kontrollpunkte > # knot Knotenfolge (besitzt mindestens degree Werte mehr als coeff!) > # einzufuegender Knoten x (muss groesser als knot[degree-1] sein!) > # option trace; > local i,j,n,m; > global knotneu,coeff1; > n:=vectdim(knot); > #Berechnung der neuen Knotenfolge > for i from degree-1 while x > knot[i] do i:=i+1 od; > i:=i-1; > knotneu:=vector(n+1); > for j from 1 to i do knotneu[j]:=knot[j] od; > knotneu[i+1]:=x; > for j from n+1 by (-1) to i+2 do knotneu[j]:=knot[j-1] od; > m:=vectdim(coeff); > for j from 1 to i-degree+1 do coeff1[j]:=coeff[j] od; > for j from i-degree+2 to i do > coeff1[j]:=((x-knot[j])*coeff[j]+(knot[j+degree-1]-x)*coeff[j-1])/(knot[j+degree-1]-knot[j]) od; > for j from i+1 to m+1 do coeff1[j]:=coeff[j-1] od; > end: Warning, new definition for norm Warning, new definition for trace > knot:=vector(7, [1,2,3,4,5,6,7]): > Curve:=array(1..4,1..2): > coeffx:=vector(4,[5/2,7/2,9/2,11/2]): > coeffy:=vector(4,[1,4,-1,2]): > for j from 1 to 4 do Curve[j,1]:=coeffx[j]; Curve[j,2]:=coeffy[j] od: > m:=3: > x:=7/2: > boehm(m,coeffx,knot,x): > Curve1:=array(1..5,1..2): > for j from 1 to 5 do Curve1[j,1]:=coeff1[j] od: > boehm(m,coeffy,knot,x): > for j from 1 to 5 do Curve1[j,2]:=coeff1[j] od: > polygon1:=plot(convert(Curve,listlist)): > polygon2:=plot(convert(Curve1,listlist)): > display(polygon1,polygon2); > >