如何从该 Voronoi 图数据中获取单元格字典?

2024-05-12

使用找到的voronoi/delaunay图生成库在这个节目中 http://sourceforge.net/projects/mapmanager/,这是基于《财富》最初的实施他的算法 http://en.wikipedia.org/wiki/Fortune%27s_algorithm,使用一组随机点作为输入数据,我可以获得以下输出数据:

  1. 的边列表德劳内三角测量 http://en.wikipedia.org/wiki/Delaunay_triangulation,这意味着对于每个输入点,我可以看到哪些输入点是其邻居。它们似乎没有任何特定的顺序。
  2. 顶点对的列表沃罗诺伊图 http://en.wikipedia.org/wiki/Voronoi_diagram,我可以用它一次一行绘制 Voronoi 图。同样,显然没有特定的顺序。
  3. 未命名的点对列表,这似乎与 2 是相同的列表,但顺序不同。
  4. 维诺图中形成的顶点列表,显然也没有特定的顺序。

以下是使用此库测试运行我的程序的数据示例:

Input points:
0   (426.484, 175.16)
1   (282.004, 231.388)
2   (487.891, 353.996)
3   (50.8574, 5.02996)
4   (602.252, 288.418)

Vertex Pairs: 
0   (387.425, 288.533)  (277.142, 5.15565)
1   (387.425, 288.533)  (503.484, 248.682)
2   (277.142, 5.15565)  (0, 288.161)
3   (387.425, 288.533)  (272.213, 482)
4   (503.484, 248.682)  (637.275, 482)
5   (503.484, 248.682)  (642, 33.7153)
6   (277.142, 5.15565)  (279.477, 0)

Voronoi lines?: 
0   (279.477, 0)    (277.142, 5.15565)
1   (642, 33.7153)  (503.484, 248.682)
2   (503.484, 248.682)  (637.275, 482)
3   (387.425, 288.533)  (272.213, 482)
4   (277.142, 5.15565)  (0, 288.161)
5   (387.425, 288.533)  (503.484, 248.682)
6   (277.142, 5.15565)  (387.425, 288.533)

Delaunay Edges: 
0   (282.004, 231.388)  (487.891, 353.996)
1   (602.252, 288.418)  (487.891, 353.996)
2   (426.484, 175.16)   (487.891, 353.996)
3   (426.484, 175.16)   (602.252, 288.418)
4   (50.8574, 5.02996)  (282.004, 231.388)
5   (426.484, 175.16)   (282.004, 231.388)
6   (50.8574, 5.02996)  (426.484, 175.16)

Vertices: 
0   (277.142, 5.15565)
1   (503.484, 248.682)
2   (387.425, 288.533)
3   (0, 288.161)
4   (272.213, 482)
5   (637.275, 482)
6   (642, 33.7153)
7   (279.477, 0)

虽然如果我只需要绘制 Voronoi 和 Delaunay 图,上述数据就足够了,但对于我尝试使用这些图进行的实际工作来说,这些信息还不够。我需要的是由 Voronoi 顶点形成的多边形字典,由每个多边形围绕形成的输入点进行索引。优选地,对于每个多边形,这些点将按顺时针顺序排序。

有了上述信息,我可以隐式地将数据分配给每个区域,如有必要,将数据分配给角点,告诉哪些区域共享边缘(使用 Delaunay 边缘),并进行相应的分析。

简而言之,如何使用可用的数据来组合一个字典,其中键是输入点之一,并且由该键索引的数据是形成周围多边形的 Voronoi 顶点的列表?或者,该信息是否隐含在我所获得的数据中?


Fortune 的算法是 O(n log n) - 但如果您尝试按照 Alink 的建议以暴力方式重建单元格,那么您的代码将是 O(n^2)。

我的答案的出发点是,您用来生成单元的不是库,而只是一个类,旨在整齐地包装财富本人最初提供的代码 http://www.skynet.ie/~sos/mapviewer/voronoi.php,实际上并不是一个成熟的库。所以,作者实际上并没有预料到你的需求,你想要的信息虽然已经计算出来了,但却无法获取。

在内部,您的输入点存储为“Site”结构的实例,并且算法继续创建半边 http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml,每个都维护一个参考“顶点”这是指向它所包含的站点的指针。沿着半边行走,您可以自然地环绕封闭的场地 - 这正是您所需要的。

为了访问这些数据,我建议修改或扩展 VoronoiDiagramGenerator 类;我将通过创建一个哈希表来完成此操作,其中站点指针作为键,单个 HalfEdge 指针作为值。然后,修改generateVoroni方法,在调用voronoi之后立即插入新代码:

For each HalfEdge in ELHash
         Get table entry for current half edge's Site
         If site in table has null HalfEdge reference
            set current HalfEdge reference
         End If
End For each

...还有你的字典。该单个半边将允许您“行走”包围相关站点的多边形的周边,我认为这就是您所要求的。您的下一个问题将是有效地发现which多边形包含一些新的数据点 - 但这是另一个问题:-)。我希望您会考虑分享您已完成的课程 - 它应该比基类更有用。

编辑: 这是一个精彩的演示,用图片描述了上述所有内容:http://ima.udg.es/~sellares/ComGeo/Vor2D_1.ppt http://ima.udg.es/~sellares/ComGeo/Vor2D_1.ppt:

  • 维诺图的定义
  • 半边树(见下图)
  • 图片中的财富算法

这是一个 C# 实现,可以帮助您检索字典,如上所述:http://www.codeproject.com/Articles/11275/Fortune-s-Voronoi-algorithm-implemented-in-C http://www.codeproject.com/Articles/11275/Fortune-s-Voronoi-algorithm-implemented-in-C

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从该 Voronoi 图数据中获取单元格字典? 的相关文章

随机推荐

  • 为什么只读输入字段无效

    考虑以下 html
  • 带有面板的 Java Swing JToolbar:外观和感觉

    我有一个JToolbar其中包含多个JPanels 需要 因为我希望每个都有特定的边界 不幸的是 外观管理器无法识别JPanels属于工具栏和JButtons因此 渲染器与普通按钮一样 即没有工具栏上的特殊鼠标悬停效果 更换JPanels
  • 在开发模式下禁用错误覆盖

    在开发模式下运行 create react app 时 有没有办法禁用错误覆盖 这就是我正在谈论的覆盖 我问这个是因为我使用错误边界 React 16 错误边界 https reactjs org blog 2017 07 26 error
  • “Microsoft.Azure.Storage.Emulator.Controller,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一

    我们无法自动填充您的 Visual Studio Team Services 帐户 遇到以下错误 TF400813 资源不可用于匿名访问 需要客户端身份验证 Microsoft Azure 工具 无法加载文件或程序集 Microsoft A
  • 使用 Jquery Easyui 将数据网格导出到 Excel

    我是 json 新手 我使用 php 从 mysql 表生成了 jason 数据 并希望将生成的 json 导出为 xls 格式 考试导出 php
  • PostgreSQL:在所有表字段的长度上创建索引

    我有一张桌子叫profile 我想按照填写最多的内容对它们进行排序 每列都是 JSONB 列或 TEXT 列 我不需要很大程度的确定性 所以通常我会按如下方式订购 SELECT FROM profile ORDER BY LENGTH CO
  • 更改 JTextPane 的大小

    我是Java新手 刚刚在StackOverflow中找到了这段代码 ResizeTextArea https stackoverflow com questions 9370561 enabling scroll bars when jte
  • 扭曲多种协议

    我希望为我正在从事的项目学习扭曲 该项目需要服务器响应 HTTP 请求以及通过 TCP 连接的其他协议 Twisted能够同时处理多种协议吗 我想使用 Twisted Web 来帮助处理 HTTP 但同时需要响应其他端口上的 TCP 连接
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • Winforms 风格/UI 外观和感觉提示

    从多年的 asp net 开发回到 winforms 应用程序 寻找有关如何 设计 winforms 的建议和技巧 类似于我在 asp net 中使用 CSS 母版页的方式 我对如何在一处更新某些类型的控件的字体 颜色感兴趣 如何保持布局的
  • Android 6.0 缺乏访问相机服务的权限

    我在 Android 6 0 中使用 Camera2API 我在Android 5 0中没有报错 然而 当我在 Android 6 0 中使用我的代码时 我遇到了问题 问题是有时我可以成功打开相机并拍照 但有时相机打不开 出现错误 java
  • 在 PhpStorm 中禁用水平滚动

    有没有办法做到这一点 我更愿意将代码换行并表示在 80 100 个字符的行长度内 每次滑动时的滚动都让我发疯 有 软包裹 IDE 中的功能 它就是这样做的 它实际上 仅在屏幕上 将行分成多行以显示整行 而不需要水平滚动 它可以在以下位置启用
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 配置 PIP 以在代理后面工作

    我已经安装了 python 3 4 3 附带pip 我想从代理后面使用 pip 所以我执行了以下操作 Created C Users foo pip pip ini并添加了代理配置部分 proxy export http proxy my
  • 从副本消费

    Kafka 将主题的每个分区复制到指定的复制因子 据我所知 所有写入和读取请求都会路由到分区的领导者 有没有办法从追随者那里消费而不是从领导者那里消费 Kafka中的复制只是为了故障转移吗 在 Kafka 2 3 及更早版本中 您只能从领导
  • 使用 PDFMAKER 将多封电子邮件保存为 pdf

    我是 VBA 的新手 但我用 SAS 编写了一些程序 用汇编程序 大型机和 PC Word Perfect 宏 编写了一些程序 用 Java HTML 和其他东西编写了一些程序 我所做的是 当我遇到问题并且我认为我可以对其进行编程时 我会在
  • vscode 窗口没有响应[重复]

    这个问题在这里已经有答案了 VS代码版本 1 77 0 操作系统版本 windows 11 22h2 这是我过去几天收到的问题 我使用了nodejs 并且没有安装任何Python或其他软件 我已经删除了所有扩展并删除了缓存 在此输入图像描述
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • YouTube 频道 URL 的正则表达式

    如何使用 REGEX 验证 YouTube 频道 URL 我发现了这个模式 但它不能正常工作 http https www youtube com channel user a zA Z0 9 1 谁能帮我 你的问题是之后的额外管道user
  • 如何从该 Voronoi 图数据中获取单元格字典?

    使用找到的voronoi delaunay图生成库在这个节目中 http sourceforge net projects mapmanager 这是基于 财富 最初的实施他的算法 http en wikipedia org wiki Fo