我想知道你是否可以告诉我如何将几个点精确地一个接一个地连接在一起。
假设:
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))
会给我相同的结果。但是,我正在寻找一个连接(绘制)每个循环的每对点的循环。
例如:
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)
)
任何帮助将不胜感激!
感谢大家的帮助,终于找到解决方案了:
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
顺便说一句,可以删除最后最长的一行,因为它与问题无关,如果有人需要它,请告诉我。
您根本不需要使用循环。您可以使用
interp1
。将 x
和 y
数据点指定为 控制点。之后,您可以指定从第一个 x
值到最后一个 x
值的更精细的点集。您可以指定 linear
样条线,因为如果您想要的行为与 plot
相同,这就是您想要完成的任务。假设 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.');
警告: 您有两个
x
值映射到 630.5477
,但会产生不同的 y
值。如果您使用 interp1
,这会给您一个错误,这就是为什么我必须稍微扰动其中一个值才能使其正常工作。当您开始使用自己的数据时,希望情况不会出现这种情况。这是我得到的情节:
你会发现我所说的这两点之间存在巨大差距。这是
interp1
的唯一限制,因为它假设 x
值严格单调递增。因此,您的 x
值集中不能有相同的两个点。