2014-06-13 2 views
1

여러 점을 정확하게 연결하는 방법을 알려 주시면 궁금합니다.Matlab에서 2D의 연속 연결 지점

는 가정 :

data = 
      x  y 
     ------------------ 
     591.2990 532.5188 
     597.8405 558.6672 
     600.0210 542.3244 
     606.5624 566.2938 
     612.0136 546.6825 
     616.3746 570.6519 
     617.4648 580.4575 
     619.6453 600.0688 
     629.4575 557.5777 
     630.5477 584.8156 
     630.5477 618.5906 
     639.2696 604.4269 
     643.6306 638.2019 
     646.9013 620.7697 
     652.3525 601.1584 

"데이터"지점의 좌표이다.

이제 첫 번째 점 (첫 번째 배열)을 두 번째 점에 연결하고 두 번째 점을 세 번째 점에 연결하는 등의 작업을하고 싶습니다.

plot(data(:,1),data(:,2))이 나에게도 같은 결과를 줄 수 있습니다. 그러나, 각 루프마다 점의 각 쌍을 연결 (플롯)하는 루프를 찾고 있습니다. 제안 된 루프가 잘 보이는,하지만 (나는 plot(x,y) 같은 말했듯이)

data1=data; 
figure 
scatter(X,Y,'.') 
hold on 
for i=1:size(data,1) 
[Liaa,Locbb] = ismember(data(i,:),data1,'rows'); 
data1(Locbb,:)=[]; 

[n,d] = knnsearch(data1,data(i,:),'k',1); 
x=[data(i,1) data1(n,1)]; 
y=[data(i,2) data1(n,2)]; 
plot(x,y); 
end 
hold off 

, 나는 각 포인트 최대 2 개 다른 지점에 연결하는 플롯의 종류를 원하는

어떤 도움 : 예를 들어

대단히 감사하겠습니다!

답변

1

덕분에, 마침내 솔루션은 발견하는 데 도움이 :

n=1; 
pt1=[data(n,1), data(n,2)]; 
figure 
scatter(data(:,1),data(:,2)) 
hold on 
for i=1:size(data,1) 
    if isempty(pt1)~=1 
     [Liaa,Locbb] = ismember(pt1(:)',data,'rows'); 
      if Locbb~=0 
       data(Locbb,:)=[]; 
       [n,d] = knnsearch(data,pt1(:)','k',1); 
       x=[pt1(1,1) data(n,1)]; 
       y=[pt1(1,2) data(n,2)]; 
       pt1=[data(n,1), data(n,2)]; 
       plot(x,y); 
      end 
    end 
end 
hold off 

enter image description here

BTW는이 질문에 관련되지 않는 경우, 마지막으로 긴 줄을 삭제 할 수있는 사람 저에게 알려주세요.

0

루프를 전혀 사용할 필요가 없습니다. interp1을 사용할 수 있습니다. xy 데이터 포인트를 조절 점으로 지정하십시오. 그런 다음 첫 번째 x 값에서 마지막으로 x 값까지보다 미세한 점 집합을 지정할 수 있습니다. 원하는 동작이 plot과 같은 경우 달성하려는대로 linear 스플라인을 지정할 수 있습니다. 위에 표시된 것처럼 data는 2D 매트릭스가 속히이라고 가정하면

%// Get the minimum and maximum x-values 
xMin = min(data(:,1)); 
xMax = max(data(:,1)); 
N = 3000; % // Specify total number of points 

%// Create an array of N points that linearly span from xMin to xMax 
%// Make N larger for finer resolution 
xPoints = linspace(xMin, xMax, N); 

%//Use the data matrix as control points, then xPoints are the values 
%//along the x-axis that will help us draw our lines. yPoints will be 
%//the output on the y-axis 
yPoints = interp1(data(:,1), data(:,2), xPoints, 'linear'); 

%// Plot the control points as well as the interpolated points 
plot(data(:,1), data(:,2), 'rx', 'MarkerSize', 12); 
hold on; 
plot(xPoints, yPoints, 'b.'); 

경고 : 당신은 630.5477에 매핑하지만 서로 다른 y 값을 생성 두 x 값이 있습니다. interp1을 사용하면 오류가 발생합니다. 따라서이 값을 작은 값으로 약간 혼란시켜야 작동 할 수 있습니다. 자신의 데이터를 사용하기 시작하면 좋을 것입니다.

enter image description here

당신은 내가 이야기 그 두 점 사이의 큰 차이가 있음을 볼 수 있습니다 : 이것은 내가 얻을 플롯이다. 이것은 에 대한 유일한 제한으로, x 값이 엄격하게 단조 증가한다고 가정하기 때.입니다. 따라서 x 값 집합에 같은 두 점을 사용할 수 없습니다. 당신의 모든

+0

귀하의 고민과 시간에 감사드립니다. 사실, 최종 결과는 괜찮아 보입니다. 추가 프로세스를 위해 루프가 필요합니다. 또한 폴리곤이 동일한 'x'값을 가지고 있어도 모든 점을 통과 할 수 있으면 좋을 것입니다. 감사합니다. – Iman

+0

회선 추적 알고리즘을 사용하십시오. https://github.com/sachinruk/xiaolinwu/blob/master/xiaolinwu.m – rayryeng

+0

감사합니다. @rayryeng. 솔직하게, 나는 그것의 플롯 결과가 단지 몇 개의 포인트를 포함하고 있기 때문에 라인 추적 알고리즘이 무엇인지 알지 못했다. – Iman

관련 문제