![]() |
1
124
|
![]() |
2
37
你要找的多边形叫做 向内/向外偏移多边形 在计算几何中,它与 straight skeleton . 这些是复杂多边形的多个偏移多边形:
这是另一个多边形的直骨架:
正如其他评论中指出的那样,根据你计划对多边形“充气/放气”的程度,你最终可以得到不同的输出连接。 从计算的角度来看:一旦你有了直骨架,你应该能够相对容易地构造偏移多边形。开源和(非商业免费) CGAL 库有一个实现这些结构的包。见 this code example 使用cgal计算偏移多边形。 这个 package manual 应该给你一个很好的起点,说明如何构建这些结构,即使你不打算使用cgal,并且包含对具有数学定义和属性的论文的参考: |
![]() |
3
8
我觉得你想要的是:
生成的多边形与旧多边形的距离“足够远”,与顶点的距离为所需距离。在一个顶点附近,距离上的一组点
我不知道这个算法是否有名字,网页上的示例代码,或者一个疯狂的优化,但是我认为它描述了你想要的东西。 |
![]() |
4
7
我从不使用 Clipper (由安格斯·约翰逊开发)但是对于这些类型的东西我通常使用 JTS . 为了演示,我创建了这个 jsFiddle 使用的 JSTS (jts的javascript端口)。您只需将需要的坐标转换为JSTS坐标:
结果是这样的:
附加信息 :我通常使用这种类型的充气/放气(为我的目的稍微修改一下)来设置地图上绘制的多边形的半径边界(使用传单或谷歌地图)。您只需将(lat,lng)对转换为JST坐标,其他一切都是相同的。例子:
|
![]() |
5
5
每一行都应该将平面拆分为“内部”和“轮廓”;您可以使用通常的内部积方法找到这一点。 将所有线向外移动一段距离。 考虑所有相邻线对(直线,而不是线段),找到交叉点。这是新的顶点。 通过删除任何相交部分来清理新顶点。--我们这里有几个箱子 (a)案例1:
如果你一个一个的花费,你就得到了:
7和4重叠。如果你看到了这一点,你就删除了这一点和中间的所有点。 (b)案例2
如果你花费两倍,你会得到:
要解决这个问题,对于每一段线,您必须检查它是否与后一段线重叠。 (c)案例3
消耗1。对于案例1来说,这是一个更一般的案例。 (d)案例4 与第3种情况相同,但要花费两倍。 事实上,如果你能处理4号案件的话。所有其他情况都只是它的特殊情况,有些线或顶点重叠。 要执行第4种情况,需要保留一个顶点堆栈。当你发现行与后一行重叠时,你推它,当你得到后一行时弹出它。--就像你在凸面船体上所做的。 |
![]() |
6
5
这里有一个替代方案,看看你是否更喜欢这个。
|
![]() |
7
5
在地理信息系统的世界中,我们使用负缓冲来完成这项任务: http://www-users.cs.umn.edu/~npramod/enc_pdf.pdf 这个 JTS library 应该为你做这个。有关缓冲区操作,请参阅文档: http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/operation/buffer/package-summary.html 有关大致概述,请参阅《开发人员指南》: http://www.vividsolutions.com/jts/bin/JTS%20Developer%20Guide.pdf |
![]() |
8
3
非常感谢安格斯·约翰逊为他的快船图书馆。 在Clipper的主页上,有一些很好的代码示例可以用来进行剪辑。 http://www.angusj.com/delphi/clipper.php#code 但我没有看到多边形偏移的例子。所以我想,如果我发布我的代码,可能对某人有用:
|
![]() |
9
1
根据@josho'brian的建议,似乎
|
![]() |
10
1
另一个选择是使用
boost::polygon
-文档有点欠缺,但是您应该发现方法
|
![]() |
11
0
有几个库可以使用(也可用于三维数据集)。
您还可以找到这些库的相应出版物,以便更详细地了解算法。 最后一个依赖性最小,是自包含的,可以读取.obj文件。 最美好的祝福, 斯蒂芬 |
|
Jema · 如何在MATLAB中屏蔽图像中的多边形? 6 年前 |
|
JaElf · 在R中使用ggmap打印多边形 7 年前 |
![]() |
Chris Satchell · d3中的点更改时更新多边形 7 年前 |
![]() |
Rada Bogdan · 将单个点转换为多边形 7 年前 |
![]() |
wickywills · SVG裁剪路径缩放 7 年前 |