绘制轮廓排序matlab

时间:2013-07-08 19:10:49

标签: matlab sorting plot contour

我有问题。 我有一组x和y坐标,通过它我可以绘制轮廓或闭合的图形。但是,在我在程序中的操作期间,坐标的顺序可能会改变。所以现在如果绘制绘图,则曲线未绘制正确。

下面的代码中给出了一个例子:

clc;
clear all 
close all 
xi = [86.7342,186.4808,237.0912,194.8340,84.2774,39.5633,86.7342];
yi = [18.2518,18.2518,102.3394,176.4611,172.1010,88.6363,18.2518];
subplot(1,2,1),plot(xi,yi);
title('original points contour');
xii=xi; yii=yi;
%Suppose the points are interchanged
t=0;
t=xii(3); xii(3)=xii(4); xii(4)=t;
t=yii(3); yii(3)=yii(4); yii(4)=t;
subplot(1,2,2),plot(xii,yii);
title('Redrawn contour with the points exchanged');
%I get this contour. 

这两个图显示在代码中。

无论元素的顺序如何,我都需要能够重绘正确的轮廓。我应该使用排序算法吗?如何确定点的顺序,以便在没有任何交叉点的情况下形成良好的闭合轮廓? 提前致谢。

注意::假设在操作过程中我的坐标集成为:

 xiiii =[40,200,210,230,50,20,40] 
 yiiii =[50,60,160,80,120,30,50]
 figure();
 plot(xiiii,yiiii,'+r'); hold on;
 % I need to somehow change the matrices in such a way so as to form
 %an non-overlapping closed surface. 
 %after manipulation I get should get this matrices
 xiii =[40,200,230,210,50,20,40];
 yiii =[50,60,80,160,120,30,50];
 plot(xiii,yiii,'+b');
 hold off; 
 %Notice the difference between the two plots. I require the 2nd plot. 

我希望这个例子让我的问题清楚。 再次感谢所有人。

1 个答案:

答案 0 :(得分:1)

解决方案很简单。您需要在第一阶段保存索引向量。然后,对于您交换的每个元素,您还需要交换正确的索引。如果您正在交换值(更改元素的顺序或位置),则此方法有效。

%before change
p = [p1 p2 p3 p4 p5];

i = [1 2 3 4 5];

% after change
pp = [p1 p2 p4 p3 p5]; 

ii = [1 2 4 3 5];

如果您仍需要更多解释,我可以修改您发布的代码。

如果您只有一堆积分,并且想要找到跨越这一点的闭环。那么我不得不提一下,你的问题是一个着名的优化问题叫做“旅行商问题”(TSP)

根据城市列表和每对城市之间的距离,访问每个城市一次并返回原始城市的最短路线是什么?它是组合优化中的NP难问题,在运筹学和理论计算机科学中很重要。 这个问题最初是在1930年制定的,也是最优化研究中最深入研究的问题之一。它被用作许多优化方法的基准。尽管问题在计算上很困难,但已知大量的启发式方法和确切的方法,因此可以解决数万个城市的某些情况。

有很多方法可以解决这个问题。 查看此链接以获取更多信息: link