Hello everyone, how do you fit two curves into a closed curve?My code is as follows.

5 visualizzazioni (ultimi 30 giorni)
load dataA.mat
%x1=dataA(:,1);
%y1=dataA(:,2);
f1 = fit(xAbove,yAbove,'smoothingspline','SmoothingParam',0.0001);%smoothingspline
%plot(f1,xAbove,yAbove)
plot(f1,'-r')
hold on
load dataB.mat
%x2=dataB(:,1);
%y2=dataB(:,2);
[xx,ind] = sort(xBelow);
yy2 = smooth(xBelow,yBelow,0.5,'rloess');
plot(xx,yy2(ind),'r-')
%f2 = fit(xBelow,yBelow,'smoothingspline','SmoothingParam',1);%smoothingspline
%plot(xBelow,yBelow)
%xBelow(1)=xAbove(1);
%yBelow(end)=yAbove(end);
%hold on

Risposte (2)

KSSV
KSSV il 20 Gen 2021
load dataA ;
load dataB ;
C1 = [xAbove yAbove] ;
C2 = [xBelow yBelow] ;
% MErge them
C = [C1 ;C2] ;
idx = boundary(C(:,1),C(:,2)) ;
C = C(idx,:) ;
plot(C(:,1),C(:,2))
  6 Commenti
Wesley
Wesley il 20 Gen 2021
My idea is similar to the idea of piecewise function fitting, where the critical points are equal at the nodes to realize the fitting of a closed curve.

Accedi per commentare.


Raghav Gnanasambandam
Raghav Gnanasambandam il 20 Gen 2021
I am not sure whether it is actually needed to combine the two curves. I am assuming you just need to find the closed curve for the whole data. Depending on how you want to fit a closed curve, you can use either boundary() or convhull().
load dataA.mat
load dataB.mat
x = [xAbove;xBelow];
y = [yAbove;yBelow];
k = boundary(x,y);
hold on;
plot(x(k),y(k));
or
load dataA.mat
load dataB.mat
x = [xAbove;xBelow];
y = [yAbove;yBelow];
k = convhull(x,y);
hold on;
plot(x(k),y(k));
Hope this helps.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by