2013-07-08 197 views
0

我有一个问题。 我有一组x和y坐标,通过它我可以绘制轮廓或封闭的图形。但是,在我的程序中,坐标的顺序可能会改变。所以现在如果绘制了曲线,曲线并不是正确的。绘制轮廓分类matlab

一个实例是下面给出在我的代码:

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. 

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

+0

您是否尝试在第一阶段保存索引向量? – NKN

+0

不,我没有。但即使我这样做也不能解决我的问题。为了更清楚地说明我正在编辑这个问题。也许那时它会变得更加清晰。 – roni

+0

请看我编辑的问题。 – roni

回答

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

+0

感谢您的回答。请看我编辑的问题。新矩阵的元素可能会改变。 (几乎肯定会)。我仍然需要找到封闭的轮廓或情节。 我当时正在考虑根据度量标准以特定顺序设置矩阵元素。但是,我不能真正决定使用哪个指标。欧几里德距离会起作用吗? – roni

+0

检查我编辑的答案。 – NKN