Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中绘制矩阵中点之间的直线_Matlab_Plot_Line - Fatal编程技术网

在MATLAB中绘制矩阵中点之间的直线

在MATLAB中绘制矩阵中点之间的直线,matlab,plot,line,Matlab,Plot,Line,我有一个n行4列的矩阵。列是x0、y0和x1、y1(因此基本上我在2D中有n对点坐标)。我想在对应的点对之间画一条线(即,仅在一行的x0,y0和x1,y1之间) 有没有可能不用一个循环?因为下面的方法可以工作,但是速度很慢 for i = 1:size(A.data, 1) plot([A.data(i, 1), A.data(i, 3)], [A.data(i, 2), A.data(i, 4)], 'k-') end 例如,尝试line X=[1:10 ; 2*(1:10)]; Y

我有一个n行4列的矩阵。列是x0、y0和x1、y1(因此基本上我在2D中有n对点坐标)。我想在对应的点对之间画一条线(即,仅在一行的x0,y0和x1,y1之间)

有没有可能不用一个循环?因为下面的方法可以工作,但是速度很慢

for i = 1:size(A.data, 1)
    plot([A.data(i, 1), A.data(i, 3)], [A.data(i, 2), A.data(i, 4)], 'k-')
end

例如,尝试
line

X=[1:10 ; 2*(1:10)];
Y=fliplr(X); 

line(X,Y)

例如,尝试
line

X=[1:10 ; 2*(1:10)];
Y=fliplr(X); 

line(X,Y)

我来这里是想得到同样的答案。我基本上希望每个x,y点都有一条水平线,从该点的x-y值开始,到下一个xy对的x值结束,没有一条线将该线段连接到下一个xy对的线段。我可以用旧的y和新的x在它们之间添加新的点来制作线段,但我不知道如何分解线段。但是你的措辞(矩阵)给了我一个想法。如果将xy对加载到一对x,y向量上,然后-等等-在x和y向量上用nan分开你的对,会怎么样。我用一个很长的正弦波试过了,它似乎起作用了。大量不相交的线段,可立即打印和缩放。:)看看它是否能解决你的问题

% LinePairsTest.m
% Test fast plot and zoom of a bunch of lines between disjoint pairs of points 
% Solution: put pairs of x1,y1:x2,y2 into one x and one y vector, but with
% pairs separated by x and or y = nan.  Nan is wonderful, because it leaves
% your vector intact, but it doesn't plot.
close all; clear all;
n = 10000; % lotsa points
n = floor(n/3); % make an even set of pairs
n = n * 3 - 1;  % ends with a pair
x = 1:n; % we'll make a sine wave, interrupted to pairs of points.
% For other use, bring your pairs in to a pair of empty x and y vectors,
% padding between pairs with nan in x and y.
y = sin(x/3);
ix = find(0 == mod(x,3)); % index 3, 6, 9, etc. will get...
x(ix) = nan; % nan.
y(ix) = nan; % nan.
figure;
plot(x,y,'b'); % quick to plot, quick to zoom.
grid on;

我来这里是想得到同样的答案。我基本上希望每个x,y点都有一条水平线,从该点的x-y值开始,到下一个xy对的x值结束,没有一条线将该线段连接到下一个xy对的线段。我可以用旧的y和新的x在它们之间添加新的点来制作线段,但我不知道如何分解线段。但是你的措辞(矩阵)给了我一个想法。如果将xy对加载到一对x,y向量上,然后-等等-在x和y向量上用nan分开你的对,会怎么样。我用一个很长的正弦波试过了,它似乎起作用了。大量不相交的线段,可立即打印和缩放。:)看看它是否能解决你的问题

% LinePairsTest.m
% Test fast plot and zoom of a bunch of lines between disjoint pairs of points 
% Solution: put pairs of x1,y1:x2,y2 into one x and one y vector, but with
% pairs separated by x and or y = nan.  Nan is wonderful, because it leaves
% your vector intact, but it doesn't plot.
close all; clear all;
n = 10000; % lotsa points
n = floor(n/3); % make an even set of pairs
n = n * 3 - 1;  % ends with a pair
x = 1:n; % we'll make a sine wave, interrupted to pairs of points.
% For other use, bring your pairs in to a pair of empty x and y vectors,
% padding between pairs with nan in x and y.
y = sin(x/3);
ix = find(0 == mod(x,3)); % index 3, 6, 9, etc. will get...
x(ix) = nan; % nan.
y(ix) = nan; % nan.
figure;
plot(x,y,'b'); % quick to plot, quick to zoom.
grid on;

这适用于我拥有的数据结构:

data = [
        0, 0, 1, 0;...
        1, 0, 1, 1;...
        1, 1, 0, 1;...
        0, 1, 0, 0 ...
       ];

figure(1);
hold off;

%slow way
for i = 1:size(data, 1)
    plot([data(i, 1) data(i, 3)], [data(i, 2) data(i, 4)], 'r-');
    hold on;
end

%fast way ("vectorized")
    plot([data(:, 1)' data(:, 3)'], [data(:, 2)' data(:, 4)'], 'b-');
axis equal
这个特别的例子画了一个正方形

关键是MATLAB在参数中按列绘制线。也就是说,如果
plot
的参数有n列,则该行将有n-1个段


在“连接点”场景中,向量中的所有点都必须连接,这与此无关,因为如果需要,MATLAB将进行转置以获得列向量。它在我的应用程序中变得很重要,因为我不想连接列表上的每个点-仅连接点对。

这适用于我的数据结构:

data = [
        0, 0, 1, 0;...
        1, 0, 1, 1;...
        1, 1, 0, 1;...
        0, 1, 0, 0 ...
       ];

figure(1);
hold off;

%slow way
for i = 1:size(data, 1)
    plot([data(i, 1) data(i, 3)], [data(i, 2) data(i, 4)], 'r-');
    hold on;
end

%fast way ("vectorized")
    plot([data(:, 1)' data(:, 3)'], [data(:, 2)' data(:, 4)'], 'b-');
axis equal
这个特别的例子画了一个正方形

关键是MATLAB在参数中按列绘制线。也就是说,如果
plot
的参数有n列,则该行将有n-1个段


在“连接点”场景中,向量中的所有点都必须连接,这与此无关,因为如果需要,MATLAB将进行转置以获得列向量。它在我的应用程序中变得很重要,因为我不想连接列表上的每个点-只连接点对。

我看不出这与我的数据结构如何匹配。嗯,这只是为了显示用法。线是矢量化的,在2D中绘制线,没有for循环,这是我认为你们想要的。只需从数据列中创建两个矩阵。X从1号和3号开始,Y从2号和4号开始。将输入和转换为行。如果要操纵打印手柄的显示方式,请使用打印手柄。确定,然后编辑答案;因为可以通过文档轻松验证使用情况。我的问题是“如何在没有循环的情况下在对应的对之间画线”,而不是“如何画线”。在您的解决方案中,供参考的“线”可以替换为“绘图”,这很好。但是,这两个版本都非常慢,导致绘图响应速度慢(缩放等)。(我正在处理1500对点;我本以为会更好。)我看不出这与我的数据结构如何匹配。好吧,这只是为了显示使用情况。线是矢量化的,在2D中绘制线,没有for循环,这是我认为你们想要的。只需从数据列中创建两个矩阵。X从1号和3号开始,Y从2号和4号开始。将输入和转换为行。如果要操纵打印手柄的显示方式,请使用打印手柄。确定,然后编辑答案;因为可以通过文档轻松验证使用情况。我的问题是“如何在没有循环的情况下在对应的对之间画线”,而不是“如何画线”。在您的解决方案中,供参考的“线”可以替换为“绘图”,这很好。但是,这两个版本都非常慢,导致绘图响应速度慢(缩放等)。(我正在处理1500对点;我本以为会更好。)