有很多组数据,编写一个matlab的循环小程序,用来计算任意两点间的距离:
ShapeX=X(1:end/2); ShapeY=X(end/2+1:end); N=30 for i=1:N for j=1:N Distance(i,j)=sqrt((ShapeX(i)-ShapeX(j))^2+(ShapeY(i)-ShapeY(j))^2);
end end D = max(max(Distance )) 这样D就可以得到了
如果数据量很大的情况,使用循环就会比较慢。我的方法是不用循环。程序如下,可以运行。 ShapeX = [260.0563 252.6130 243.2607]; ShapeY = [331.5828 338.5321 344.2020];
%从所有的数据中任意选取两个点 ii=nchoosek(1:length(ShapeX),2); xx=ShapeX(ii); yy=ShapeY(ii);
%计算任意两点之间的距离。 cc=sqrt(((yy(:,2)-yy(:,1)).^2) + (xx(:,2)-xx(:,1)).^2); %从距离中选取最大的,实际上你可以从cc中对任意两点的距离做很多统计。 result=max(max(cc));
%寻找有最大距离的点对,注意,有可能有多个成对的点有最大距离。 pointx = [xx(find(cc == result),1),xx(find(cc == result),2)]; pointy = [yy(find(cc == result),1),yy(find(cc == result),2)];
结果是 result =
21.0080
pointx =
260.0563 243.2607
pointy =
331.5828 344.2020
(责任编辑:泉水) |