Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Construir curvas de spline en 2D y 3D

Este ejemplo muestra cómo usar el comando cscvn de Curve Fitting Toolbox™ para construir curvas de spline cúbico en dos y tres dimensiones.

Seleccionar los puntos

Este ejemplo muestra cómo dibujar una curva suavizada a través de una lista de puntos, en el orden en el que se producen. Primero, seleccionamos puntos aleatorios en el plano y los almacenamos en una matriz, un punto por columna.

npts = 10;
xy = [randn(1,npts); randn(1,npts)];
plot(xy(1,:),xy(2,:),'ro','LineWidth',2);
text(xy(1,:), xy(2,:),[repmat('  ',npts,1), num2str((1:npts)')])
ax = gca;
ax.XTick = [];
ax.YTick = [];

Figure contains an axes object. The axes object contains 11 objects of type line, text. One or more of the lines displays its values using only markers

Conectar los puntos

A continuación, construya la curva utilizando el comando cscvn y represéntela utilizando fnplt.

hold on
fnplt(cscvn(xy),'r',2)
hold off

Figure contains an axes object. The axes object contains 12 objects of type line, text. One or more of the lines displays its values using only markers

También podría utilizar el comando getcurve si desease introducir la lista de puntos de forma interactiva.

Curvas de spline 3D

Es igual de sencillo crear curvas de spline en tres dimensiones. Esta vez, haremos algo menos aleatorio. Primero, generamos los puntos.

npts = 13;
t = linspace(0,8*pi,npts);
z = linspace(-1,1,npts);
omz = sqrt(1-z.^2);
xyz = [cos(t).*omz; sin(t).*omz; z];
plot3(xyz(1,:),xyz(2,:),xyz(3,:),'ro','LineWidth',2);
text(xyz(1,:),xyz(2,:),xyz(3,:),[repmat('  ',npts,1), num2str((1:npts)')])
ax = gca;
ax.XTick = [];
ax.YTick = [];
ax.ZTick = [];
box on

Figure contains an axes object. The axes object contains 14 objects of type line, text. One or more of the lines displays its values using only markers

Conectar los puntos

A continuación, se muestra la curva del spline 3D a través de estos puntos proporcionada por cscvn. Si añadimos el primer punto al final de la lista, obtenemos una curva cerrada suave.

hold on
fnplt(cscvn(xyz(:,[1:end 1])),'r',2)
hold off

Figure contains an axes object. The axes object contains 15 objects of type line, text. One or more of the lines displays its values using only markers