【问题标题】:How to find if one shape contains another shape如何查找一个形状是否包含另一个形状
【发布时间】:2021-10-27 13:54:03
【问题描述】:

我有一系列这样的形状

$shapes = [
  [
    "BA",
    "AD",
    "DB"
  ],
  [
    "BC",
    "CD",
    "DA",
    "AB"
  ],
  [
    "BD",
    "DC",
    "CB"
  ]
]

它们表示连接并形成形状的线段。

但是,您可以看到我也有较大的形状,其中包含 2 个较小的形状。 如何读取包含另一个形状的任何形状?

我们确实有所有顶点的所有坐标 x, y。

我正在考虑提取所有形状的顶点列表,然后较小的顶点应该出现在较大的顶点中?还有其他更有效的方法吗?

【问题讨论】:

  • 是否保证内多边形的顶点也是外多边形的顶点?
  • 请注意,您可能应该使用“多边形”而不是“形状”这个词,特别是如果您一直在通过搜索引擎寻找答案
  • @Stef - 所有多边形都由一种算法收集,该算法正在读取图形中所有可能的多边形。所以有些会被包含在其他人中。

标签: algorithm math geometry


【解决方案1】:

这是一个合理的解决方案:

  1. 将边缘分解为一系列点并将它们分类到优先级队列中。给定您的示例,它将是 {A,B,D},{A,B,C,D},{B,C,D}。为了便于参考,我分别称它们为 alpha、beta、gamma。

  2. 将点链一一放入最终结果中,如果结果中的某个形状包含新形状候选的所有点,则将其删除。让我把它放在一个流程图中:

result = {} --> result = {alpha} --> result = {alpha,beta}
添加 gamma 时,我们发现 beta 包含 gamma 的所有点,并且比 gamma 有更多的点,因此删除 beta
--> 结果 = {alpha} --> 结果 = {alpha,gamma}

这个解决方案意味着每个形状都有一组不同的点。如果有形状共享同一组点,但连接方式不同,则可以不使用优先级队列来修改此方法。相反,将这些点按照它们的连接顺序放入一个向量中,并确保每个形状的起点都按一定的顺序放置。

如果您还有其他问题,请告诉我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多