我需要找到一个点,它是一个不规则形状的多边形的视觉中心.通过视觉中心,我的意思是在视觉上看起来位于多边形的大区域的中心的点.应用程序是在多边形内部放置一个标签.
这是一个使用内部缓冲的解决方案:
如果要使用它,找到缓冲区的有效且快速的方法是什么?如果要使用任何其他方式,这是哪种方式?
真正坚韧的多边形的一个很好的例子是一个巨大的厚U(用Arial Black或Impact或一些这样的字体书写).
我有一个详细的2D多边形(代表一个地理区域),它由一组非常大的顶点定义.我正在寻找一种算法,它将简化和平滑多边形(减少顶点的数量),其约束条件是生成的多边形的区域必须包含详细多边形的所有顶点.
对于上下文,这是一个复杂多边形边缘的示例:

我的研究:
我找到了Ramer-Douglas-Peucker算法,它将减少顶点的数量 - 但生成的多边形将不包含所有原始多边形的顶点.请参阅维基百科上的这篇文章Ramer-Douglas-Peucker
我考虑过扩展多边形(我相信这也称为向外多边形偏移).我发现了以下问题:扩展多边形(仅凸面)和膨胀多边形.但我不认为这会大大减少我的多边形的细节.
感谢您给我的任何建议!
我有一个凸多边形P1的N点.该多边形可以是任何形状或比例(只要它仍然是凸的).
我需要P2使用原始多边形几何计算另一个多边形,但是"扩展"给定数量的单位.算法可以用于扩展凸多边形?
language-agnostic math geometry polygon computational-geometry
EDIT5:最后用Javascript实现了Angus Johnson的Clipper库,并为主机选择了Sourceforge.
现场演示:http://jsclipper.sourceforge.net/6.1.1.1/main_demo.html
下载源代码:https: //sourceforge.net/projects/jsclipper/
Wikipage一步一步的教程:https: //sourceforge.net/p/jsclipper/wiki/Home%206/
介绍包括数十个样本多边形的演示程序:https: //sourceforge.net/p/jsclipper/wiki/Main_Demo%206/
我希望这可以帮助任何需要折线功能的折线和多边形裁剪库.
EDIT4:一种可能性是使用http://p2js.gelicon.biz/en/将pascal转换为javascript
.尚未成功.p2js.exe clipper.pas给出致命错误"无法找到限幅器使用的单位系统".
编辑:我发现脚本#(Github),它似乎能够将C#转换为Javascript.Clipper lib在C#中可用,那么可以使用Script#进行C# - > JS转换吗?
编辑3:没有使用脚本#转换,但也有Emscripten,但4000 cpp行转换为300 000 Javascript行,所以不是一个选项.手动转换似乎是一个王道.
编辑2:我做了一个例子,它显示了问题.使用向左和向右箭头应用偏移量.在一定距离内它可以正常工作,但随后会出现问题.黄色描边多边形是所谓的原始偏移多边形,AFAIK Clipper lib提供了一种方法来处理删除原始偏移多边形的不需要的部分.
Angus Johnson有一个Clipper库用于抵消多边形.
我需要在Javascript中使用此功能来抵消SVG多边形.
有人制作了Javascript端口吗?
如果没有,我会欣赏一些指导方针,例如.以下内容:
- 这将是多么艰巨的任务?
- 哪一个选择源(Delphi,C#,C++)?
- 抵消需要lib中的所有内容吗?
Clipper库产生以下结果,这些结果只是所需的功能:

一些链接:
- Sourceforge中的文件
- Clipper文档
- 一个Stackoverflow答案
- 偏移算法
我正在使用JavaScript画布处理项目,并且需要能够将光标捕捉到多边形的某个距离.我已经可以捕捉到多边形本身,但我需要让光标更远.
据我所知,最好的方法是缩放多边形并捕捉到它,但是当我缩放多边形时,旧多边形的边缘与新多边形的边缘之间的距离并不总是匹配起来.
这是一个问题的例子:

编辑:灰色代表原始多边形,如果我正常缩放多边形,红色是我得到的,绿色是我想要完成的
我已经尝试将多边形转换为原点并乘以比例因子,但似乎无法将每个边缘按特定距离缩放.
我曾经在pygame上绘制线条(给出一些起点和终点),如下所示:pygame.draw.line(window, color_L1, X0, X1, 2)其中2定义了线条的粗细.
至于,抗锯齿不支持.draw,所以我搬到.gfxdraw和pygame.gfxdraw.line(window, X0[0], X0[1], X1[0], X1[1], color_L1).
但是,这不允许我定义线的粗细.我怎么能有厚度和抗锯齿在一起?
我有一个3D三角形网格,我正在寻找一种算法来抵消所有的 没边界的边缘 网格的边界边缘向内,沿着三角形网格的表面.
我已经看过在一个用于充气/放气(偏移,缓冲)多边形的算法中提到的Clipper,但它并不真正处理3D,也不能保留三角形网格,我不确定是否重新三角测量结果与原始输入网格匹配的边框更容易解决问题.
关于如何实现这一目标的任何建议?
我已经在互联网上搜索了好几天,但一直无法找到一个好的答案(或至少一个对我有意义的答案)似乎应该是一个常见的问题.如何缩放任意多边形?特别是凹多边形.我需要一种能够处理凹(绝对)和自相交(如果可能)多边形的算法.我用来处理简单凸多边形的明显而简单的算法是计算多边形的质心,将该质心平移到原点,缩放所有顶点,并将多边形平移回原始位置.
这种方法不适用于许多(或者全部)凹面多边形,因为质心经常落在多边形之外,因此缩放操作也会导致平移,我需要能够"就地"缩放多边形而不需要最终结果被翻译.
有人知道缩放凹多边形的方法吗?或者也许找到"视觉中心"的方法,它可以用作缩放操作的参考框架?
为了澄清,我在2D空间工作,我想使用"视觉中心"作为参考框架来缩放我的多边形.所以也许另一种提问的方法是,如何找到凹面和/或自相交多边形的视觉中心?
谢谢!
我试图弄清楚如何仅使用多边形的角坐标来缩小多边形。例如,如果我有以下带角[(0, 0), (0, 100), (20, 100), (30, 60), (40, 100), (60, 100), (60, 0), (40, 10), (40, 40), (20, 40), (20, 10)]的形状,则形状如下所示:
如果我将这个多边形缩小一些宽度和高度因子,我想找到角坐标。例如,如果我想将其宽度缩小 10%,将高度缩小 20%,那么这可以显示为如下所示:
我试图cv2.resize()通过调整大小后无法获得角落来做到这一点。我一直在尝试寻找一种用于调整多边形大小或缩小多边形大小的算法,但找不到有关如何执行此操作的任何信息。是否存在用于执行此类操作的任何算法或软件包?
我正在尝试将 sf 多边形缩小固定距离。
采取这个简单的多边形:
coords <- list(rbind(c(0,0), c(2,0), c(2,2), c(1,2), c(1,1), c(0,1), c(0,0)))
p <- sf::st_polygon(x = coords)
ggplot() + geom_sf(data = p, fill = "white", color = "black")
Run Code Online (Sandbox Code Playgroud)
我想制作一个形状相同的多边形,但其边距原始多边形正好 0.1 个单位。这是目标:
target.coords <- list(rbind(c(0.1,0.1), c(1.9,0.1), c(1.9,1.9), c(1.1,1.9), c(1.1,0.9), c(0.1,0.9), c(0.1,0.1)))
target <- sf::st_polygon(x = target.coords)
ggplot() +
geom_sf(data = p, fill = "white", color = "black") +
geom_sf(data = target, fill = "green", color = "dark green")
Run Code Online (Sandbox Code Playgroud)
我以为这样sf::st_buffer()就能到达那里,但外角不太匹配。
p1 <- sf::st_buffer(x = p, dist = -0.1)
ggplot() …Run Code Online (Sandbox Code Playgroud) 我有一个不规则多边形的坐标点,如(x1,y1)...(x1,y1).我可以使用坐标计算多边形的面积.如何使用坐标扩展或缩小多边形区域.?