exponenta event banner

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

В этом примере показано, как использовать cscvn команда из 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.