这个问题与图中的绘制线无关。我希望以下列方式对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提前。
答案 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”因为在某些情况下线条缺少坐标(像素)。 两个答案都是:)。