【问题标题】:Finding out if a circle can "escape" a set of points找出一个圆是否可以“逃脱”一组点
【发布时间】:2023-02-24 00:01:37
【问题描述】:

简单解释:我正在尝试创建一个程序来标记圆圈是否可以用于以后的计算。使用圆圈的要求:

  • 点(图中的黄金点)不能在圆周内
  • 圆圈必须能够“避开”周围的点,例如不得在封闭空间内。

第一个要求很容易解决,但我对第二个要求有点挣扎。

我在 python3.x 中编码,并使用 DT = scipy.spatial.delaunay(golden_spots)marked_circles = DT.find_simplex(circle_centers) 作为标记圆圈的初始方法,如下图所示(绘制凸包以方便可见),但它也在每个圆圈中标记两个圆圈能够“逃脱”但在 delaunay 三角剖分内的图(左图中的所有红色圆圈和右图中最左边和最右边的红色圆圈)。这里的问题是我仍然想要标记右图中的内部红色圆圈,而不是外部两个。

根据我可用的数据,我有所有点和圆心的 x/y 坐标及其半径(所有圆在给定的图中具有相同的半径)。 此外,圆圈沿 x 轴和 y 轴的间隔不均匀。

图解:

  • 灰色圆圈:未标记
  • 蓝色圆圈:由于 delaunay 而标记
  • 绿色圆圈:由于靠近点而标记
  • 红色圆圈:由于 delaunay 而标记但不在点附近

问题:有没有办法在最里面(右图)仍然被标记的情况下不标记最外层的圆圈。提前致谢。

笔记:这两个地块只是示例,但理论上,地块上的不同位置可能会有单独的黄金点,不一定在中间的一个连续“堆”中。

【问题讨论】:

    标签: python convex-hull delaunay


    【解决方案1】:

    一种潜在的解决方案可能如下所示:

    1. 消除所有包含金点的圆圈(我认为是蓝色/绿色)

    2. 在所有小于d的黄金点之间画线,其中d是圆的直径。

    3. 对于每个剩余的圆,确定该点是否位于所有边都由边包围的区域内。一些可能的方法可能是: 从空间的 delaunay 三角剖分创建一个图形,其中 3 个黄金点之间的每个三角形空间如果沿着非边缘相邻(即共享点之间的距离)则相互连接大于d)。从所有外部 delaunay 三角形到汇点/端点创建一条边。然后,如果存在从圆的起始 delaunay 三角形到水槽的路径,则圆应为绿色。

    4. 另一种方法:通过从凸包开始创建一个凹包,然后迭代地“收缩”包包含两个连续点但不由边缘连接的包(即,如果包包含大于 d 的两个点,添加附加点到凹包,直到所有点之间的距离小于d。)最终的凹包将包含所有红色圆圈的中心,并且不包含任何灰色圆圈的中心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      相关资源
      最近更新 更多