【问题标题】:How to find a "quadrilateral" grid that matches a set of points in 2D?如何找到与二维中的一组点匹配的“四边形”网格?
【发布时间】:2021-08-10 09:15:31
【问题描述】:

给定二维空间中的一组 n*m 不同点,具有任意分布。这是一个抽象的算法问题,其中的点可能在任何地方。

如何将这些点与 n*m 坐标的“四边形”网格相匹配,这样

  1. 每个数据点只有一个坐标
  2. 没有两个数据点具有相同的坐标
  3. 矩形网格是“平的”,即相邻坐标的连接线没有交点?
  4. n * m 的四边形网格对应于尺寸为 n * m 的矩形网格

第 4 个条件的示例,n = 2 和 m = 3。第一个网格不是解决方案,因为网格不是 2x3 类型(它是 1x6 类型):

在我的真实案例中,我有几千个数据点。

在我看来,这个问题应该经常发生,但是我找不到解决这个问题的算法。

在 cmets 中指出,可能存在许多点都位于完全相同的直线上的退化情况。我不介意稍微移动数据点以避免那些退化的情况——只要它们的距离关系没有真正扭曲。

我尝试应用 SOM(自组织图),但这会在网格中留下空白点并将不同的数据点映射到同一个网格点上。 我还尝试迭代地应用 Quantiletransformer,但这需要一些复杂的分而治之的方案,即使这样我也不确定它是否会成功。
我想也许可以应用基于“质量和弹簧”的算法,但我没有尝试过。

【问题讨论】:

  • 对积分的分布有什么了解吗?您是在尝试匹配照片中的真实网格,还是这是一个抽象算法问题,其中点可能在任何地方?是否保证有解决方案?
  • 到目前为止,YOU 尝试过哪些研究?分享您的想法/发现/代码。
  • 我建议在您的问题中用“四边形”代替“矩形”。目前,唯一能让问题易于理解的是示例解决方案的图像。
  • 您可以从问题numpy - Create triangular mesh from vertex coordinates 中获得灵感,注意到两个相邻的三角形形成一个四边形。
  • 显然存在退化的情况,所有任意放置的点都在同一点或一条线上。这意味着可能还有很多退化的情况,其中网格的一个边缘无法正确放置。这是个问题吗?

标签: python algorithm mesh


【解决方案1】:

这里的典型方法是构建一个三角形网格,然后将三角形合并为四边形。然而,仅从点云重建网格是不可能的。 可能的是创建点集的凸包的网格;见scipy.spatial.Delaunay

【讨论】:

  • 谢谢!我认为这将导致任意的四边形网格。但是我正在寻找一个 n * m 的四边形网格。我在描述中添加了一张图片,以使这种情况更清楚。
【解决方案2】:

构建网格的一种可能性是取底部的 3 个点,按它们的 x 值对它们进行排序,然后取接下来的 3 个,依此类推。请注意,根据点云的旋转可能会给您不同的结果。

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2013-10-22
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多