create a 3D smoothing with csaps (or similar)
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Alberto Acri
le 7 Juin 2024
Commenté : Mathieu NOE
le 10 Juin 2024
To get a better set of nodes arranged in space as a ‘curve’, how can I improve this code? Could you suggest?
load curve_1
cc = curve_1; %or curve_2
x = cc(:,1);
y = cc(:,2);
z_min = min(cc(:,3));
z_max = max(cc(:,3));
z = z_min:0.1:z_max;
z = z';
% code
[pp,p] = csaps(z,[x;y]);
val = fnval(pp,z);
figure
plot3(x,y,z);
hold on
plot3(val(1,:),val(2,:),z,'r-')
grid on
0 commentaires
Réponse acceptée
Mathieu NOE
le 7 Juin 2024
hello again !
as your post title is about smoothing, this is what I propose , based on the fex submission :
I attached the function in my answer if it makes your life simpler
now, maybe we should also create some intermediate points with interpolation (will be done just after this first answer)
so the starter :
load curve_1
cc = curve_1; %or curve_2
% load curve_2
% cc = curve_2; %or curve_2
x = cc(:,1);
y = cc(:,2);
z = cc(:,3);
% smoothing (if needed)
[zz,s,exitflag] = smoothn({x,y,z},1);
xn = zz{1};
yn = zz{2};
zn = zz{3};
plot3(x,y,z,'*');
hold on
plot3(xn,yn,zn);
4 commentaires
Mathieu NOE
le 10 Juin 2024
My pleasure , and thanks again for accepting my answer
you can also reward other contributors by voting
Plus de réponses (1)
Matt J
le 7 Juin 2024
Modifié(e) : Matt J
le 7 Juin 2024
load curve_1
cc = curve_1; %or curve_2
x = cc(:,1);
y = cc(:,2);
z = cc(:,3);
t=linspace(0,1,height(cc));
tu=linspace(0,1,5*height(cc));
% code
[pp,p] = csaps(t,cc',0.995);
val = fnval(pp,tu);
figure
plot3(x,y,z,'o');
hold on
plot3(val(1,:),val(2,:),val(3,:),'r-')
grid on
Voir également
Catégories
En savoir plus sur Spline Postprocessing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!