【问题标题】:How to find corner points of a polygon composed of squares?如何找到由正方形组成的多边形的角点?
【发布时间】:2021-12-30 08:19:08
【问题描述】:

一组相邻的正方形组成一个多边形,正方形的4个顶点坐标全部已知,但正方形的顺序未知。

在示例图像中,我用红点突出显示所有角点。如果以正确的顺序连接它们,则可以恢复完整的形状,就像在正确的位置放置正方形一样。

所以问题是,如何找到红点,以及它们的顺序?

也许还有一个问题是如果形状有一些洞怎么办?

【问题讨论】:

  • 你只有每个方格的坐标,没有特定的顺序吗?
  • 是的,只有正方形的坐标,不知道顺序。
  • 您可以在绘制正方形 (2x2) 的位置创建图像,然后使用轮廓函数并对其进行分析以提取转折点。
  • 另外,您可以输出所有正方形的所有边,并丢弃所有重复对。然后通过匹配公共端点形成一个或多个循环。两条对齐的边可以合并为一条。

标签: algorithm graph path vertex


【解决方案1】:
  1. 计算每个顶点在您的输入中出现的次数。出现奇数次的就是你的“角落”。将这些顶点标记为“角”。

  2. 计算输入中每​​条边出现的次数。只出现一次的边是你的“外边”,将它们标记为外边(出现两次的边是内边,我们不关心它们)。

  3. 随机选择一个具有一个或多个未使用外边缘的“角”,沿着其中一个外边缘沿直线(即保持相同方向)穿过“偶数”顶点,直到到达另一个角(奇数顶点)。

  4. 从新的拐角处继续,仅使用以前未使用的直尺。当您返回起始角时,您已按顺序完成了该(半?-)连接形状的角列表。

  5. 如果仍有未使用外边缘的角,则随机选择其中一个并转到第 3 步。重复此步骤,直到考虑到所有角的外边缘。

【讨论】:

  • (注:修订)
  • “奇偶”规则很简洁,很有帮助。我发现如果两个正方形仅共享一个公共顶点但不共享边,则此规则可能不起作用。换句话说,像这样的两个正方形不应该被看作是相连的。因此,“奇偶”规则是必要的,但在逻辑上不是充分条件。我不明白的另一件事是第 2 步,“如果你来到一条直线边缘的尽头,但它不是一个角”。显然,这是一种深度优先搜索算法,但我无法在脑海中描述这种情况,你能给我举个例子吗?非常感谢。
  • 我确实考虑了对角正方形的情况,在这种情况下它不会算作一个角,但该算法仍然可以通过直接通过交叉路口来工作。它应该稍后回来并笔直穿过剩余的边缘,最终仍然关闭循环并将两个形状计算为一个(这没关系,我们无论如何都不计算形状)。我假设“按顺序排列的角落”是指“绘图顺序”,这将实现。如果你的意思是别的,请告诉我。
  • 至于规则 2,是的,它似乎不太正确,让我考虑一下……好吧,我想我可以解决它……好吧,我想我已经解决了算法通过添加“外”边缘的概念。见上文。
猜你喜欢
  • 2011-01-06
  • 2014-02-06
  • 2014-03-13
  • 2014-01-23
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多