使用python在2d平面上识别和排序多个圆圈

时间:2016-08-08 18:18:05

标签: python algorithm cluster-analysis convex-hull

我有多个点在2d平面上形成许多圆圈,需要对它们进行识别和排序以便进一步计算。我有每个点的[x,y]坐标和代表每个点的数字。

一个圆圈中的所有点编号都应按列表排序。然后应该跟随下一个圆圈的点数。假设每个圆圈由6个点组成。它们应该是第一个然后是相邻圆圈的下一个6点。

我发现Convex Hull是一种识别闭合多边形的方法。这是类似的,但我希望它能够在同一平面上识别多个凸包。我认为这应该可以在python中实现。有人可以帮忙吗?

修改

  1. 圆圈不重叠
  2. 圆圈的大小都相同,即半径相同
  3. 每个圆圈都有相同的点数。
  4. 它们是均匀间隔的孔。孔半径非常特殊 - 10mm,整个阵列呈矩形。一块有均匀间隔的孔的板 - 虽然 - 一排孔是交错的。
  5. 示意图: 圈子在盘子上。每个圆圈由10个点定义。我们有这些点的(x,y)坐标

1 个答案:

答案 0 :(得分:0)

了解编辑中的细节可以获得一些快捷方式。请允许我重申/推断一些事情:

  1. 行/列中的垂直/水平不重叠
  2. 孔都是标准宽度/高度(相同直径)
  3. 给定行/列中每个孔的“第一个”点的x或y值将相同(假设您的FEM使用一致的孔方向)
  4. 考虑到这些观察结果,在实现注释中已经提到的算法之前,我会尝试像下面这样的天真(伪代码大纲)。这显然不是运行代码,但希望得到概念 - 通常,创建点(第1列,第2列)的列“箱”并将它们分成行箱(然后表示给定孔中的所有点)。 / p>

    ## sort points into an array by x, then y
    # while unmapped_points.count > 0
        ## Determine the lowest 'x' value (far left)
        ## Create a column 'bin' of all points with x <= (x_min + diameter)
        # while column_bin.count > 0
            # Determine lowest 'y' value (bottom edge of hole)
            # Create a row (hole) 'bin' of all points with y <= (y_min + diameter)
            # Update y_curr to minimum y from remaining points in column
        # Update x_curr to minimum x from all remaining points
    

    如果我们采取一个更不普遍的情况并添加另一个条件:

    1. 初始偏移和列/行间距已知
    2. 然后您可以跳过查找起始列/行限制并直接窗口点:

      # Hole1 = points where (p.x >= x1_offset and p.x <= x1_offset + diameter) and (p.y >= y1_offset and p.y <= y1_offset + diameter)
      

      虽然如果布局已经知道,你也可以计算中心点并循环寻找已知半径内的点:

      # points where sqrt( (p.x - c.x)^2 + (p.y - c.y)^2) < radius
      

      但我假设间距未知 - 否则你可以通过循环每个中心点并计算具有已知半径和均匀增量角度的偏移来生成点而不了解有关FEA模型的任何信息。