在2D数组Ints中查找所有角度的线

时间:2013-09-23 15:55:08

标签: function line formula multidimensional-array

给定2D整数数组,其中0 =白色,1 =黑色,如下所示:

1110001
0110000
0011000
0101100
0100110
0100011
1000001
1011000
1011000

我想找到数组中的所有黑线。我不只是想要垂直水平和对角线,斜率为1.我可以做所有这些事情。我想找到一种方法来查找所有斜率的线(它可以包括我已经用它来减少代码的方式)。因此,如果您查看2D数组,您可以看到一条斜率为3的线,从[0,8](左下角)开始,然后到[2,0](中间的顶部)。我看了几个其他的列表,但它们似乎只是寻找我已经能够做的事情,或者没有找到找到这些线路的方法。

我使用Java进行编码,但C ++代码或者只是一个逻辑解释也会受到欢迎。

如果我的描述仍然过于宽泛,请以这种方式思考:我希望能够找到可以使用绘画中的线条工具创建的每一行。

1 个答案:

答案 0 :(得分:0)

我认为我找到了一个解决方案,相对来说,至少可以以合理的成本获得我所寻找的大部分线路。请评论此解决方案中的任何缺陷。

  1. 查找所有水平,垂直和完美的对角线(斜率为1或-1)。 将解释水平线以简化,但同样可以应用,小对齐和对角线和垂直线。
  2. 检查最右边的点是否有与右上角或顶部相邻的点。 (对于右下角或底部也一样)。
  3. 如果相邻点向上,则检查从当前点开始向后移动一条起点等于相邻点的线。 (在右下角或右下角的列表中进行相同的操作。)
  4. 找到行时或当Y离当前行2或更远时停止。
  5. 检查当前行的结束点是否是新列表中一行的结束点(列表中包含由多条水平行组成的行)。如果是这样,请在此行添加新行(在步骤4中找到的行)。 (这样可以防止重叠的线条。
  6. 如果在步骤4中Y为2或更远(行尾,无连接)将行添加到主列表中。
  7. 迭代完所有水平线后,将新列表添加到主列表中。
  8. 在需要时进行调整,重复2-7,完成后,应完成主列表。 应该是垂直线和水平线的唯一重叠,使得正方形或类似的东西,但水平线或水平线附近不应重叠。
  9. 如果此逻辑存在任何缺陷,请告知我们,如果可能的话,请提出替代方案。