Interpolation of 3D point data
75 次查看(过去 30 天)
显示 更早的评论
Hello, I have a nx5 matrix where column 3, 4 and 5 are x,y,z 3D points respectively. I was wondering how I would interpolate (smooth) this 3D data. Many thanks
4 个评论
Walter Roberson
2016-4-20
What properties does the curve need to have? Are you looking for a spline fit? A pchip fit?
采纳的回答
John D'Errico
2016-4-29
编辑:John D'Errico
2016-4-29
You can use my interparc tool, as found on the file exchange. It is designed to solve exactly this problem, in 2 or more dimensions.
xyz = interparc(1000,x,y,z,'spline');
xyz will be a 1000x3 array, where each row is an interpolated point on the curve.
Of course, you can do the interpolation in other ways. If you want to do the work in MATLAB yourself in much the same way as you tried to do it:
t = [0;cumsum(sqrt(diff(x).^2+diff(y).^2+diff(z).^2))];
t = t/t(end);
ti = linspace(0,1,1000);
xx = spline(t,x,ti);
yy = spline(t,y,ti);
zz = spline(t,z,ti);
The above solution, which uses a cumulative piecewise linear arclength as the parameter for interpolation, deals more properly with points that are not uniformly spaced.
0 个评论
更多回答(2 个)
Walter Roberson
2016-4-20
It looks to me as if you likely want a scattered interpolant.
shellmcg
2016-4-28
1 个评论
John D'Errico
2016-4-28
编辑:John D'Errico
2016-4-29
I'm sorry, but this answer is just a poor way of solving the problem, presuming the points are somehow equally spaced. Use of a spline as was done here can cause some strange artifacts.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Smoothing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!