给定一个网格图,其中每个单元格可以由一对(x, y)
描述,以及这些单元格的向量,我怎样(很好地)检查该向量中的单元格是否形成“隧道”,即。它们是所有垂直还是水平排列?但是如果我只想知道大多数是否排成一行(而不是所有)该怎么办?
All are lines up Most are lined up Not lined up
C C C C
C C C C C C C C C C C C C C C C C C C C
C C C C C
C C
答案 0 :(得分:2)
您可以对细胞的x和y坐标进行直方图。 如果所有单元格都是水平排列的,则直方图中只有一个y值和许多连续的x值,这些值都只出现一次。垂直方向与x和y翻转相同。
如果要检查,如果大多数都排成一行,请搜索直方图中的值,该值最常出现(隧道最长)并检查具有该x或y坐标的单元格(如果它们是排队(即:他们的y或x坐标(取决于前一步骤中使用的x或y)是连续的没有间隙(可能先排序)) 如果不是,请搜索第二高的出现值,......
答案 1 :(得分:1)
首先检查他们的y
坐标是否相等,然后按x
坐标排序并从左到右遍历以检查间隙,可以检查他们是否制作水平隧道。使用相反的坐标检查垂直隧道。
对于近似检查,您必须澄清“最”的含义。
答案 2 :(得分:1)
您可以计算X和Y坐标的standard deviation。细胞越“隧穿”,对于X或Y,std偏差越小。
例如,在Python中:
import numpy
def is_tunnelled(cells):
# given cells=[(x,y), (x,y),...]
x_values, y_values = zip(*cells)
lowest_std_dev = min(numpy.std(x_values), numpy.std(y_values))
return lowest_std_dev < STD_DEVIATION_THRESHOLD
由您决定STD_DEVIATION_THRESHOLD的值应该是什么。