2013-07-08 1 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