在MATLAB中计算闭合曲线(或多边形)的曲率 [英] Calculating the curvature of a closed curve ( or polygon) in matlab

查看:0
本文介绍了在MATLAB中计算闭合曲线(或多边形)的曲率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下几点

x = [1.34, 0.92, 0.68, 0.25, -0.06, -0.34, -0.49, -0.72, -0.79, -0.94, -1.35, -0.35, 0.54, 0.68, 0.84, 1.20, 1.23, 1.32, 1.34];
y = [0.30, 0.43, 0.90, 1.40, 1.13, 1.08, 1.14, 1.23, 0.52, 0.21, -0.20, -0.73, -0.73, -0.82, -0.71, -0.76, -0.46, -0.13, 0.30];

给出一条闭合的曲线(或多边形):

figure(1)
hold on
plot(x,y,'k');
scatter(x,y,'r');
xlim([-2 2]);
ylim([-2 2]);
axis equal

我希望计算曲线上各点的曲率(尽可能准确)。

到目前为止,我只有一个简单的计算切向(一阶导数)和曲率(二阶导数)的方法:

dsx = diff(x);
dsy = diff(y);
ds = sqrt(dsx.^2+dsy.^2);
Tx = dsx./ds;
Ty = dsy./ds;
ds2 = 0.5*(ds(1:end-1)+ds(2:end));
Hx = diff(Tx)./ds2;
Hy = diff(Ty)./ds2;

但我得到的曲率非常不准确:

figure(1)
quiver(x(1:end-2),y(1:end-2),Hx,Hy,'b','autoscalefactor',1.2); 
xlim([-2 2]); ylim([-2 2]);
axis equal

这应该是一个简单的计算,但它不起作用,请注意:如何才能在最简单的近似中找到曲率,并在方向和大小上具有合理的精度?

推荐答案

曲率计算正确,关闭的是绘制。请注意,diff计算后续元素之间的差异,从而产生一个具有较少一个元素的向量。它估计样本对之间的导数。如果重复此操作,您将在样本处获得二阶导数,但不会在第一个或最后一个样本处得到二阶导数(您现在少了两个元素)。

您确实注意到了这一点,因为您绘制的曲率只有一个顶点。

因此,您所需要做的就是在第一个导数之后复制一个点(我将最后一个点添加到开头,这样元素的顺序就与输入数组中的顺序相同)。索引语句Tx([end,1:end])就是这样做的。

在下面的代码中,我还用黑色绘制法线(Ty,-Tx)。

x = [1.34, 0.92, 0.68, 0.25, -0.06, -0.34, -0.49, -0.72, -0.79, -0.94, -1.35, -0.35, 0.54, 0.68, 0.84, 1.20, 1.23, 1.32, 1.34];
y = [0.30, 0.43, 0.90, 1.40, 1.13, 1.08, 1.14, 1.23, 0.52, 0.21, -0.20, -0.73, -0.73, -0.82, -0.71, -0.76,-0.46, -0.13, 0.30];

% First derivative
dsx = diff(x);
dsy = diff(y);
ds = sqrt(dsx.^2+dsy.^2);
Tx = dsx./ds;
Ty = dsy./ds;

% Second derivative & curvature
ds2 = 0.5*(ds([end,1:end-1])+ds);
Hx = diff(Tx([end,1:end]))./ds2;
Hy = diff(Ty([end,1:end]))./ds2;

% Plot
clf
hold on
plot(x,y,'ro-');
x = x(1:end-1);
y = y(1:end-1); % remove repeated point
quiver(x+dsx/2,y+dsy/2,Ty,-Tx,'k','autoscalefactor',0.3); 
quiver(x,y,Hx,Hy,'b','autoscalefactor',1.2); 
set(gca,'xlim',[-2 2],'ylim',[-1.5 2]);
axis equal

这篇关于在MATLAB中计算闭合曲线(或多边形)的曲率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆