首页 > 解决方案 > 如何使用平滑曲线连接近似圆形分布的点?

问题描述

我有一组 12 个点,它们以 (0, 0) 为中心,并以 30 度的间隔大致分布在一个圆圈中,如图所示。 十二点

我想使用平滑曲线来链接(通过)它们,如下图所示(我用手画了红线)。 红色的手绘曲线

我想用python或matlab制作。我分别尝试了上半部分和下半部分的一些插值方法,并希望将它们组合成一条完整的曲线。然而,结果总是过冲。

感谢您的任何建议!

标签: pythonmatlabcurve-fitting

解决方案


我认为这里的关键是要注意,您必须将其视为 2d 中的参数化曲线,而不仅仅是 1d 到 2d 函数。此外,由于它应该类似于圆形,因此您需要一种支持周期性边界的插值方法。这是适用的两种方法:

% set up toy data
t = linspace(0, 2*pi, 10);
t = t(1:end-1);
a = 0.08;
b = 0.08;
x = cos(t+a*randn(size(t))) + b*randn(size(t));
y = sin(t+a*randn(size(t))) + b*randn(size(t));
plot(x, y, 'ok');

% fourier interpolation
z = x+1i*y;
y = interpft(z, 200);
hold on
plot(real(y), imag(y), '-.r')

% periodic spline interpolation
z = [z, z(1)];
n = numel(z);
t = 1:n;
pp = csape(t, z, 'periodic');
ts = linspace(1, n, 200);
y = ppval(pp, ts);;
plot(real(y), imag(y), ':b');

推荐阅读