【问题标题】:Finding widest empty straight path through a set of point通过一组点找到最宽的空直路径
【发布时间】:2011-04-27 02:30:14
【问题描述】:

我正在创建一个简单的游戏,并在为我的游戏设计 AI 时遇到了这个问题: 给定笛卡尔坐标中矩形内的一组 N 点,我需要找到通过该矩形的最宽直线路径。路径必须为空(即不包含任何点)。

我想知道是否有任何有效的算法来解决这个问题?你能推荐任何与这个问题相关的关键字/论文/任何东西吗?

编辑:矩形总是由其角的 4 个点定义。我添加了一张图片用于说明。上图中的路径由两条红线确定

【问题讨论】:

  • 也许你能找到一些涉及德劳内三角测量的东西。
  • 一条从哪里到哪里的路径?
  • @belisarius 从矩形外,穿过矩形并到达矩形外

标签: algorithm path geometry pathgeometry


【解决方案1】:

这是最宽的空走廊问题。 Houle 和 Maciel 在 1988 年题为“通过一组点找到最宽的空走廊”的技术报告中给出了 O(n2)-时间、O(n)-空间算法,这似乎不是可在线使用。幸运的是,Janardan 和 Preparata 在他们的论文 Widest-corridor problems 的第 4 节中描述了这个算法,该论文是可用的。

【讨论】:

  • :-?这对我来说似乎很复杂:(你能解释一下这个算法吗?
【解决方案2】:

遍历所有点对。通过该对构造一条线l。 (^1) 在 l 的每一边,要么有其他点,要么没有。如果不是,则在 l 的那一侧没有路径。如果还有其他点,则遍历计算从 l 到每个此类点的垂直距离 d 的点。记录最小值d。那是 l 那边最宽的路径。继续遍历所有对,将该对的最宽路径与之前的最宽路径进行比较。

这个算法可以被认为是幼稚的并且在O(n^3)时间运行。

编辑:上述算法漏掉了一个案例。在上面的 ^1 处,插入:“通过该对的每个点构造两条垂直于 l 的线。如果这些线之间没有第三个点,则记录它们之间的距离 d点。这构成了一条路径。在 ^1 处继续算法。加上case,算法还是O(n^3)

【讨论】:

  • 我认为这个算法不适用于等边三角形的情况。它将返回一半作为最宽路径,而不是高度。
  • @Cephron,嗯,没有。它将返回三个不同方向的高度。该算法不受点方向的影响。这条线,也就是路径,由前两个点决定,它们可以是任意方向。
  • 啊!是的,我现在明白了。我以为您指的是这对点之间的路径,而不是这对点两侧的路径。我的错!
  • 你需要三个点来确定路径。但是,我认为存在一对点也确定路径的情况。 i.imgur.com/Zc57K.png
  • @Chan,谢谢,我错过了那个。我添加了额外的案例。
【解决方案3】:

我自己,我将从查看点集的 Delaunay 三角剖分开始: http://en.wikipedia.org/wiki/Delaunay_triangulation

那里似乎有大量资源可用于构建此算法的高效算法—​​—Fortune 的算法,初始时间为 O(n log n)。

我的直觉告诉我,您最宽的路径将由该图中的一条边定义(即,它将垂直于边,其宽度将等于边的长度)。如何对边缘进行排序、检查候选并确定最宽的路径。我喜欢这个问题,我会继续思考这个问题。 :)

编辑 1:我的直觉令我失望!一个简单的等边三角形就是一个反例:最宽的路径比三角剖分中的任何边都短。还在想……

编辑 2:因此,我们需要一个黑盒算法,给定集合中的两个点,找到通过以这两个点为界的点集的最宽路径。 (想象两条穿过两点的平行线;将它们相互协调地旋转,直到它们之间没有点)。我们称这个算法的运行时间为“R”。

给定这样的算法,我们可以做到以下几点:

  1. 构建点集的 Delaunay 三角剖分:O(n log n)
  2. 按宽度对边缘进行排序:O(n log n)
  3. 从最大边开始向下移动,使用黑盒算法确定涉及这两个点的最宽路径;将其存储为 X : O(nR))
  4. 当被检查的边缘小于 X 的宽度时停止。

第 1 步和第 2 步很好,但 O(nR) 有点吓人。如果 R 结果是 O(n),那么整个算法已经是 O(n^2)。好消息是,对于一组一般的随机点,我们希望我们不必遍历所有边缘。

【讨论】:

  • 如果你的等边三角形在一个矩形内,你必须包括矩形的边界,给你八个三角形和 12 条边。当然,其中一条边垂直于解。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多