matlab - 在矩阵上画一条直线

标签 matlab matrix line

我有一个矩阵m = zeros(1000, 1000)。在这个矩阵中,我想从我的矩阵中绘制一条穿过 2 个点的线的估计值。假设 x = [122 455];y = [500 500];

我如何在 Matlab 中执行此操作?是否有任何预定义的功能可以执行此操作?我正在使用 Matlab 2012b。

最佳答案

我将这两个端点表示为 p1p2 因为我打算使用 xy 其他东西。我还假设 p1p2 的第一个坐标是 x,第二个是 y。所以这是一个相当简单的方法:

  1. 得到直线 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));
    
  2. xy的值转换为矩阵中元素的索引,并将这些元素设置为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/

相关文章:

matlab - 删除对象句柄并保留 MATLAB 中的变量

c - 多线程(pthreads)MATLAB mex函数导致MATLAB退出后崩溃

matlab - reshape 列向量

Python - 对风险的边际贡献

matlab - 继续在 Matlab 中一遍又一遍地播放声音?

c++ - cv::Mat,在不知道矩阵类型的情况下在行列获取值

python - 关于python矩阵逻辑索引

r - 将分组的 geom_vline 添加到多个方面

java - JAVA中在文件的一行末尾添加特定字符串

html - 带文本的 CSS3 渐变水平线