# create a 3D smoothing with csaps (or similar)

10 views (last 30 days)
Alberto Acri on 7 Jun 2024
Commented: Mathieu NOE on 10 Jun 2024
To get a better set of nodes arranged in space as a ‘curve’, how can I improve this code? Could you suggest?
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

Mathieu NOE on 7 Jun 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 :
cc = curve_1; %or 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);
Alberto Acri on 7 Jun 2024
Thank you @Mathieu NOE! You always surprise me!
Mathieu NOE on 10 Jun 2024
My pleasure , and thanks again for accepting my answer
you can also reward other contributors by voting

Matt J on 7 Jun 2024
Edited: Matt J on 7 Jun 2024
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
Alberto Acri on 7 Jun 2024
Thank you! I accepted Mathieu's answer because it gave me more solutions. However, your answer is well accepted and I cannot accept both!

### Categories

Find more on Spline Postprocessing in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!