通过2D阵列检查线

时间:2016-04-24 01:27:55

标签: multidimensional-array

我有一个2D boolean数组(boolean[][]),我有两个点((x, y))。我想在这两个点之间画一条线,看看该线是否与任何具有true值的空格相交。

为了澄清,假设每个元素都是1 unit x 1 unitboolean[][]将始终为矩形。我是从指定点的中心进行光线投射的。

我真的不知道从哪里开始,一些建议将不胜感激。

1 个答案:

答案 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
    }
}

一对夫妇注意到:

  • 非坐标的所有内容都需要是浮点数(包括deltaX和deltaY)
  • p0p1是点(x,y),可以是整数