1

n行4列の行列があります。列はx0、y0、およびx1、y1です(したがって、基本的に2Dの点座標のペアはn個あります)。対応するポイントペアの間に線を引きたい(つまり、1行の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
4

3 に答える 3

1

私は同じ答えを探してここに来ました。基本的に、各x、yポイントに、そのポイントのxy値で始まり、次の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;
于 2013-08-10T04:13:28.030 に答える
1

これは、私が持っているデータ構造に対して機能します。

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が引数の列ごとに線を引くことです。つまり、の引数にplotnの列がある場合、その行にはn -1個のセグメントがあります。

ベクトル内のすべての点を接続する必要がある「ドットを接続する」シナリオでは、MATLABは必要に応じて列ベクトルを取得するために転置するため、これは関係ありません。リストのすべてのポイントを接続するのではなく、ポイントのペアのみを接続する必要があるため、アプリケーションで重要になります。

于 2013-08-25T23:26:57.743 に答える
-1

lineたとえば試してみてください

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

line(X,Y)
于 2013-03-25T18:32:50.930 に答える