java - 如何像 Voronoi 图/泰森多边形那样生成多边形并获取每个多边形的节点?
问题描述
我希望能够生成一组多边形,我可以在其中提取每个多边形的所有节点。例如:
Polygon 1 - (0, 0),(0,2),(2,0)
Polygon 2 - (0, 2),(2,2),(2,0)
Polygon 3 - (0, 2),(5,5),(8,5),(8,0),(2,0)
And so on...
我对可用的工具不感兴趣,因为这只是项目的一部分。我希望能够插入随机点来生成这个带有多边形及其节点坐标的随机数据集。
我从哪说起呢?有没有我可以用编程语言实现的算法?顺便说一句:数据应该在 PostgreSQL 数据库中用作几何图形。我想使用的语言是 Java。
解决方案
Tinfour 项目有一个名为 BoundedVoronoiDiagram 的 Java 类,它可能对您有用,可以作为灵感来源,请参阅Tinfour.org。有一个名为 ExampleVoronoi 的示例应用程序,我使用(稍作修改)从 10 个顶点生成以下图片:
将以下代码添加到演示的末尾会生成一个多边形列表及其顶点。该代码将多边形标识为开放(无界)或封闭(有界和有限):
List<ThiessenPolygon> polygons = diagram.getPolygons();
for (ThiessenPolygon p : polygons) {
Vertex v = p.getVertex(); // defining vertex for polygon
String openString = p.isOpen() ? "open " : "closed";
double area = p.getArea();
System.out.format("Vertex %2d, polygon is %s, area=%5.2f%n",
v.getIndex(), openString, area);
List<IQuadEdge> edges = p.getEdges();
for (IQuadEdge e : edges) {
Vertex a = e.getA(); // first point in edge
System.out.format(" %12.6f, %12.6f%n", a.getX(), a.getY());
}
}
例如:
Vertex 9, polygon is closed, area= 0.09
0.358217, 0.496937
0.625090, 0.764692
0.454992, 0.887576
0.181977, 0.854051
推荐阅读
- uiscrollview - UIDocumentPickerViewController 滚动视图与顶部导航栏重叠
- php - 在 laravel 中调用命令 artisan tinker 后如何进入新行或调用新命令。
- solr - 如何使用 Xpath 和 SOLR 索引 HTML 中的特定标签
- memory - apache点燃内存估计
- oracle12c - 如何使用 ojdbc7.jar 连接到 Oracle 9i?
- c# - 如何从 ASP.NET Core 2.0 中的自定义中间件请求身份验证
- angularjs - 使用 AngularJS 和 ASP.NET 将日期转换为 dd-mm-yyyy
- python - 可视化 LDA 主题模型时出错
- java - Hibernate 无法解析列
- node.js - 安装 npm bootstrap 的问题