行列がありm = zeros(1000, 1000)
ます。この行列内で、行列から2点を通る線の推定値を描きたいと思います。x = [122 455];
と言いましょうy = [500 500];
。
Matlabでこれを行うにはどうすればよいですか?これを行うための事前定義された関数はありますか?Matlab2012bを使用しています。
2 つのエンドポイントをp1
and とp2
表記x
しy
ます。p1
また、 andの最初の座標p2
はxで、2 番目の座標はyであると想定しています。したがって、これを行うためのかなり簡単な方法を次に示します。
線y = ax + bの方程式を取得します。MATLAB では、これは次の方法で実行できます。
x = p1(1):p2(1)
dx = p2(1) - p1(1);
dy = p2(2) - p1(2);
y = round((x - p1(1)) * dy / dx + p1(2));
x
との値を行列の要素のインデックスに変換し、y
それらの要素を 1 に設定します。
idx = sub2ind(size(m), y, x);
m(idx) = 1;
10 行 10 列の小さな行列の例を次に示します。
%// This is our initial conditon
m = zeros(10);
p1 = [1, 4];
p2 = [5, 7];
%// Ensure the new x-dimension has the largest displacement
[max_delta, ix] = max(abs(p2 - p1));
iy = length(p1) - ix + 1;
%// Draw a line from p1 to p2 on matrix m
x = p1(ix):p2(ix);
y = round((x - p1(ix)) * (p2(iy) - p1(iy)) / (p2(ix) - p1(ix)) + p1(iy));
m(sub2ind(size(m), y, x)) = 1;
m = shiftdim(m, ix > iy); %// Transpose result if necessary
結果は次のとおりです。
m =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
更新: dy > dxの場合に動作するように、このアルゴリズムにパッチを適用しました。最大の変位を持つ次元を x 次元であるかのように扱い、必要に応じて結果を転置します。