如何在R中的图像上绘制线条

时间:2013-11-13 14:59:10

标签: r

这个问题与图中的绘制线无关。我希望以下列方式对2D矩阵(或其他)生效的函数。

我们有一个初始矩阵:

0 0 0  
0 0 0  
0 0 0  

从(1,1)到(3,3)的一行将产生以下结果:

1 0 0  
0 1 0  
0 0 1 

从(1,2)到(3,1)的一行将产生以下结果:

0 1 0  
0 1 0  
1 0 0

我知道我可以编写一个执行此操作的函数,但我想避免这种情况。 Thx提前。

3 个答案:

答案 0 :(得分:2)

我认为你正在努力实现这一目标 -

# coordinates
xmin = 1
xmax = 3
ymin = 2
ymax = 1
# resolution
howmanystepsx <- 3
howmanystepsy <- 3

# deciding which coordinates 'fall' on the path
dt <- data.frame(
  x = round(seq(from = xmin, to = xmax, length.out = howmanystepsx),0),
  y = round(seq(from = ymin, to = ymax, length.out = howmanystepsy),0)
)

# creating a grid
plotgrid <- matrix(nrow = max(xmax,xmin), ncol = max(ymax,ymin))

# marking points that 'fall' on the path
for ( i in seq(nrow(dt)))
{
  plotgrid[dt[i,'x'],dt[i,'y']] <- 1
}

plotgrid[is.na(plotgrid)] <- 0

输出:

> plotgrid
     [,1] [,2]
[1,]    0    1
[2,]    0    1
[3,]    1    0

答案 1 :(得分:0)

如果您创建dt作为矩阵,则可以在没有循环的情况下执行此操作:

# coordinates
xmin = 1
xmax = 3
ymin = 2
ymax = 1
# resolution
howmanystepsx <- 3
howmanystepsy <- 3
dt=cbind(
   round(seq(from = xmin, to = xmax, length.out = howmanystepsx),0),
   round(seq(from = ymin, to = ymax, length.out = howmanystepsy),0))
plotgrid <- matrix(0,nrow = max(xmax,xmin), ncol = max(ymax,ymin))
然后是魔术:

plotgrid[dt]=0
plotgrid

我想知道Bresenham算法是否符合您的要求......

答案 2 :(得分:0)

想发布我最终使用的内容:

getLineCoor <- function (x1, y1, x2, y2) 
{
    steps <- max( abs(x1-x2), abs(y1-y2) ) + 1 
    return ( cbind(round(seq(x1, x2, length.out=steps) ,0),
                   round(seq(y1, y2, length.out=steps) ,0)) )
}

我需要在步骤中“+1”因为在某些情况下线条缺少坐标(像素)。 两个答案都是:)。