Funciones Básicas

      Subrutina para generar funciones básicas de B-Splines para vectores con nodos abiertos.

c = orden de la función básica del B-spline
d = primer término de la relación recursiva de la función básica
e = segundo término de la relación recursiva de la función básica
npts = número de puntos que definen el polígono (puntos iniciales)
n(,) = array que contiene las funciones básicas
nplusc = constante (npts + c). Máximo número de valores de nodo
t = valor del parámetro
temp() = array temporal
x() = vector de nodos
subrutina basicas(c,t,npts,x();n(,))

dimension temp(20)

nplusc = npts+c
Se calcula el primer orden de las funciones básicas
for i=1 to nplusc-1
	if t>=x(i) and t<x(i+1) then
		temp(i)=1
	else
		temp(i)=0
	end if
next i
Calcular las funciones básicas de mayor orden
for k=2 to c
	for i=1 to nplusc-k
		if temp(i)<>0 then
			d=((t-x(i))*temp(i))/(x(i+k-1)-x(i))
		else
			d=0
		end if
		if temp(i+1)<>0 then
			e=((x(i+k)-t)*temp(i+1))/(x(i+k)-x(i+1))
		else
			e=0
		end if
		temp(i)=d+e
	next i
next k

if t = x(nplusc) then temp(npts)=1
Poner en un array
for i=1 to npts
	n(1,i)=temp(i)
next i
if t=x(nplusc) then n(1,npts)=1
return
Nodos abiertos

      Subrutina para generar vector de nodos abiertos para B-Splines.

c = orden de la función básica del B-spline
n = número de puntos que definen el polígono (puntos iniciales)
nplusc = constante (npts + c). Máximo número de valores de nodo
x() = vector de nodos
subrutina nodos(n,c;x())


nplusc = n+c
nplus2 = n+2
for i=2 to nplusc-1
	if t>c and i<nplus2 then
		x(i)=x(i-1)+1
	else
		x(i)=x(i-1)
	end if
next i

return
Nodos uniformes

      Subrutina para generar vector de nodos uniformes para B-Splines.

c = orden de la función básica del B-spline
n = número de puntos que definen el polígono (puntos iniciales)
nplusc = constante (npts + c). Máximo número de valores de nodo
x() = vector de nodos
subrutina nodos(n,c;x())


nplusc = n+c

for i=1 to nplusc
	x(i)=(i-1)	
next i

return
B-Splines abiertos

      Subrutina para generar B-Splines con nodos abiertos.

b(,) = array que contiene los vertices
b(,) = array que contiene los puntos de la curva
k = orden de la función básica del B-spline
nbasis = array con las funciones basicas para un simple valor
npts = número de puntos que definen el polígono (puntos iniciales)
nplusc = constante (npts + c). Máximo número de valores de nodo
t = valor del parámetro
x() = vector de nodos
p1 = núnero de puntos para ser calculado en la curva
subrutina bspline(k,p1,npts,b(,);p(,))

dimension nbasis(1,20),x(30),temp(1,3)

nplusc = npts+k
Inicialización del vector de nodos y del array de funciones basicas
Mat nbasis = Zer(1,npts)
Mat x = Zer(nplusc)
Generar el vector de nodos uniformes
Call nodos(npts,k;x)

icount = 0
Calcular los puntos de la curva del b-spline
for t=0 to x(npts+k) step x(npts+k)/(p1-1)
        icount = icount+1
        Call Basicas(k,t,npts,x;nbasis)
        Mat temp=nbasis*b
	p(icount,1)=temp(1,1)
        p(icount,2)=temp(1,2)
        p(icount,3)=temp(1,3)
next t

return
B-Splines uniformes

      Subrutina para generar B-Splines uniformes.

b(,) = array que contiene los vertices
b(,) = array que contiene los puntos de la curva
k = orden de la función básica del B-spline
nbasis = array con las funciones basicas para un simple valor
npts = número de puntos que definen el polígono (puntos iniciales)
nplusc = constante (npts + c). Máximo número de valores de nodo
t = valor del parámetro
x() = vector de nodos
p1 = núnero de puntos para ser calculado en la curva
subrutina bspline(k,p1,npts,b(,);p(,))

dimension nbasis(1,20),x(30),temp(1,3)

nplusc = npts+k
Inicialización del vector de nodos y del array de funciones basicas
Mat nbasis = Zer(1,npts)
Mat x = Zer(nplusc)
Generar el vector de nodos uniformes
Call nodos(npts,k;x)

icount = 0
Calcular los puntos de la curva del b-spline
for t=(k-1) to (npts) step (npts-k-1)/(p1-1)
        icount = icount+1
        Call Basicas(k,t,npts,x;nbasis)
        Mat temp=nbasis*b
	p(icount,1)=temp(1,1)
        p(icount,2)=temp(1,2)        
next t

return

Última modificación el