Matlab中的二维顺序连接点

Matlab中的二维顺序连接点,matlab,plot,connect,point,sequential,Matlab,Plot,Connect,Point,Sequential,我想知道你能否建议我如何将几个点一个接一个地连接在一起 假设: 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

我想知道你能否建议我如何将几个点一个接一个地连接在一起

假设:

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
“数据”是点的坐标

现在,我想连接(绘制)第一个点(第一个阵列)到第二个点,第二个点到第三个点,依此类推

请注意,
绘图(数据(:,1),数据(:,2))
将给出相同的结果。然而,我正在寻找一个循环,它连接(绘制)每个循环的每一对点

例如:

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个其他点的图(正如我所说的那样,像
plot(x,y)


任何帮助都将不胜感激

您根本不需要使用循环。您可以使用
interp1
。将
x
y
数据点指定为控制点。之后,可以指定从第一个
x
值到最后一个
x
值的更精细的点集。您可以指定
线性
样条曲线,因为如果您想要的行为与
绘图
相同,那么这就是您想要完成的。假设
数据
是一个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
x
值,但会产生不同的
y
值。如果您使用
interp1
,这将给您一个错误,这就是为什么我必须稍微扰动其中一个值以使其工作的原因。当您开始使用自己的数据时,希望情况并非如此。这是我得到的情节:


你会发现,我所说的这两点之间存在着巨大的差距。这是
interp1
的唯一限制,因为它假设
x
值严格单调递增。因此,在
x
值集中不能有相同的两点。

感谢您的帮助,最终找到了解决方案:

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


顺便说一句,可以删除最后一行,因为它与问题无关,如果有人需要它,请告诉我。

我将感谢您的考虑和时间。事实上,最终结果看起来很好,我需要在一个循环中进行进一步的处理。此外,如果多边形可以通过所有点,即使其中一个点具有相同的“x”值,那就太好了。再次感谢,请使用线条跟踪算法:非常感谢@rayryeng。坦白地说,我没有得到什么是直线跟踪算法,因为它的绘图结果只包含几个点。直线跟踪算法本质上是
interp1
在点对之间所做的,但更为稳健。如果你想在两点之间连接一条直线,你只能离散地连接。。。基本上,它将包含几个中间点。我不知道你还想从你的问题中得到什么。这将是我最后的评论,因为我认为我已经解决了这个问题。祝你好运