【问题标题】:Finding verticies of a 2D voronoi region defined by edges in a bounded area查找由有界区域中的边定义的 2D voronoi 区域的顶点
【发布时间】:2021-06-25 22:56:41
【问题描述】:

(我不能 100% 确定标题是否是最好的描述,如有必要,我会进行编辑)

我正在尝试创建一个 voronoi 区域以在游戏中实现分屏效果。我正在按照this PDF 中列出的步骤进行操作。据我了解:

  1. 沿着玩家之间的中点找到一条线
  2. 找到每个玩家各自线的交点,以相关区域为界
  3. 使用这些顶点的凸包为每个玩家创建一个区域。

我找到了第 3 步的算法,我遇到的困难是如何找到每个区域的顶点。以这张图片为例:

看着玩家 C,我发现我需要找到 A/C 线、B/C 线和 D/C 线的交点。很容易。我被卡住的地方是,如果一条线碰到边缘,那么我必须找到它碰到边缘的顶点,以及该区域中的任何角(如该图像中的左下角)。但我不能只将区域的边作为线扔进去,因为超过 4 个玩家,一个区域不能保证接触到屏幕的边缘,所以这些点需要被丢弃,我不是确定如何将其纳入流程。

如果有什么不同,我会在 C#/Unity 中这样做。

【问题讨论】:

    标签: c# algorithm geometry computational-geometry voronoi


    【解决方案1】:

    我认为查看关于 Voronoi_diagrams 及其对偶图,称为Delaunay triangulations。 如果您可以构建 Voronoi 图,则可以构建其对偶 Delaunay 三角剖分,反之亦然。 Voronoi 图的顶点是围绕 Delaunay 三角剖分的三角形外接的圆的中心。因此,每个 Voronoi 顶点都是其对应的对偶三角形的三个正交平分线与 Delaunay 三角剖分的交点。

    特别是对于一些特定的算法,您可以查看: Fortune's algorithmBowyer-Watson algorithm 的双重属性。

    【讨论】:

    • 是的,当我第一次问这个问题时,我不知何故错过了这些页面,但我一直在阅读它们(以及几十个相关页面),我的问题是它们实现起来真的很复杂,尤其是只有 10 分或更少。所以现在我想知道我是否可以像上面描述的那样找到一种更简单的方法。我还发现了这个stackoverflow.com/questions/973094/…,我正在研究它,但大多数答案都是模糊或不完整的,或者根本不简单。我可能需要编辑问题
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2012-06-18
    相关资源
    最近更新 更多