Построение сплайновых кривых в 2D и 3D

В этом примере показано, как использовать cscvn команда от Curve Fitting Toolbox™, чтобы создать кубические сплайновые кривые в два и три измерения.

Выбор точек

Этот пример покажет, как чертить плавную кривую через список точек в порядке, в котором они происходят. Во-первых, мы выбираем некоторые случайные точки в плоскости и храним их в матрице, одной точке для каждого столбца.

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. The axes contains 11 objects of type line, text.

Соединение точек

Затем создайте кривую с помощью cscvn команда и график это с помощью fnplt.

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

Figure contains an axes. The axes contains 12 objects of type line, text.

Вы могли также использовать getcurve команда, если вы хотели ввести список точек в интерактивном режиме.

3-D сплайновые кривые

Столь же легко создать сплайновые кривые в трех измерениях. На этот раз мы сделаем что-то менее случайное. Во-первых, мы генерируем точки.

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. The axes contains 14 objects of type line, text.

Соединение точек

Вот 3D сплайновая кривая через эти точки, обеспеченные cscvn. Путем добавления первой точки в конец списка мы получаем сглаженную замкнутую кривую.

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

Figure contains an axes. The axes contains 15 objects of type line, text.