【问题标题】:Find all polygons in points using MATLAB使用 MATLAB 查找点中的所有多边形
【发布时间】:2014-02-17 21:04:39
【问题描述】:

我在平面上有一组点,我想找到所有凸多边形,但不包括其中的一个点。

例如,我想查找所有三角形、所有四个大小的多边形、所有四个五个大小的多边形等等,直到可以在不包含点的情况下找到它们。

在图像中,行 a 对应于大小为 3 的凸多边形。虽然第 1 列和第 2 列显示了我想要的正确示例,但第 3 列显示了一个三角形,其中包含两个点,其中我不要。

bc 行显示大小为 4 和 5 的多边形示例。

b3 展示了一个非凸多边形的例子

我想知道 MATLAB 或任何其他语言中是否有函数,或者是否有人知道可以做到这一点的算法。

除了点之外,该算法还可以接收要搜索的多边形的大小,如果不包含该大小的任何多边形,它将返回所有可能正确的多边形或为空。

感谢您的帮助。

【问题讨论】:

  • 您也可以尝试在 math.stackexchange.com 上提问。只要确保您以数学方式而不是从 MATALB 编程的角度来表述您的问题。
  • 我不确定我是否理解您的问题:“[...] 所有三角形,所有四个大小的多边形,[...] 直到可以在不包含点的情况下找到它们。 "你能试着更清楚地重新表述它吗?
  • @jessica,我认为多边形的大小是输入参数吗?
  • 多边形应该是凸的吗?我希望他们应该这样做,但是您的示例 b3 告诉我不同​​。
  • 很好的观察 Heuster,这就是为什么我把重点放在蓝色,但不知何故我忘了解释。

标签: algorithm matlab convex-polygon


【解决方案1】:

第 1 步:对点执行 Delaunay 三角剖分。

第 2 步:

  • 对于大小为 3 的多边形:生成的三角形就是结果。
  • 对于大小为 4 的多边形:选择任意一对共享两个角的三角形
  • 对于大小为 5 的多边形:选择任何大小为 4 的多边形并将其与 正好共享两个角的三角形

【讨论】:

  • 小说明:为了避免“循环”回到角落以获得更高的点数,额外的三角形应该与多边形共享完全两个角。
  • @Jonas 我认为 Delaunay-Triangulation 会让我排除一些可能的三角形,例如使用 Delaunay 不会返回 a1 和 a2。
【解决方案2】:

如果可行,您可以尝试简单的解决方案:-

  1. 为 k 边多边形选择 k 个点
  2. 对其应用凸包算法
  3. 如果凸包大小等于 k,则点集形成所需的 k 边多边形。

时间复杂度:- O(2^N*N*logN)

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2017-09-02
    • 2014-02-06
    • 2017-04-23
    • 2011-11-06
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多