我有一个2D boolean
数组(boolean[][]
),我有两个点((x, y)
)。我想在这两个点之间画一条线,看看该线是否与任何具有true
值的空格相交。
为了澄清,假设每个元素都是1 unit x 1 unit
。 boolean[][]
将始终为矩形。我是从指定点的中心进行光线投射的。
我真的不知道从哪里开始,一些建议将不胜感激。
答案 0 :(得分:0)
如果我已正确理解您的问题,听起来您只想计算网格中哪些二进制点受到线路的影响。计算机使用Bresenham's line algorithm的时间最长。它在以后的几年中被改编为使用抗锯齿。由于您处理简单的开/关位,您可以使用简单的算法。该链接具有更多的理论,以及该算法对其他线路问题的一些调整。
伪代码看起来像这样:
deltaX = p1.X - p0.X
deltaY = p1.Y - p0.Y
error = -1.0
# NOTE: assuming deltaX is not 0 (vertical)
slope = Abs(deltaY / deltaX)
y = p0.Y
for(x = p0.X; x < p1.X; x++)
{
check(x,y) # plot/check, this is the point of interest
error += slope
if(error >= 0.0)
{
y += 1
error -= 1
}
}
一对夫妇注意到:
p0
和p1
是点(x,y),可以是整数