我将两个端点表示为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维度,然后在必要时转置结果.