我有一个矩阵m = zeros(1000, 1000)
。在这个矩阵中,我想从我的矩阵中绘制一条穿过 2 个点的线的估计值。假设 x = [122 455];
和 y = [500 500];
。
我如何在 Matlab 中执行此操作?是否有任何预定义的功能可以执行此操作?我正在使用 Matlab 2012b。
最佳答案
我将这两个端点表示为 p1
和 p2
因为我打算使用 x
和 y
其他东西。我还假设 p1
和 p2
的第一个坐标是 x,第二个是 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 维,然后根据需要转置结果。
关于matlab - 在矩阵上画一条直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585965/