我需要找到一个点,它是一个不规则形状的多边形的视觉中心.通过视觉中心,我的意思是在视觉上看起来位于多边形的大区域的中心的点.应用程序是在多边形内部放置一个标签.
这是一个使用内部缓冲的解决方案:
如果要使用它,找到缓冲区的有效且快速的方法是什么?如果要使用任何其他方式,这是哪种方式?
真正坚韧的多边形的一个很好的例子是一个巨大的厚U(用Arial Black或Impact或一些这样的字体书写).
我正在寻找一种算法,我可以检查凸多边形(形状1)是否适合另一个多边形(形状2).
我的第一项研究将我带到了"包装不规则形状".这在我看来有点矫枉过正.我只有一个容器和一个对象.
形状1通常是凸多边形.形状2可以是凸的或凹的.
我的应用:我有三维激光扫描仪测量原木,这给我形状2.我也有不同的切割轮廓,我认为凸形船体,形状1.
现在我想检查切割轮廓是否适合我的激光轮廓.
我找到了一些解决方案,但它们太乱了.
algorithm linear-algebra linear-programming convex-optimization convex-polygon
给定一组2D点作为不规则形状的边界,一个可能不是凸面并且可能有内部孔的形状,是否有算法找到适合边界的最大圆?
我已经做了很多搜索,我确实找到了接近的算法,比如最大的空圆问题,但到目前为止我找不到的算法与我的约束相匹配.
我使用谷歌地图,我在地图上标记区域:

var areaCoords2 = [
new google.maps.LatLng(32.819649, 35.073102),
new google.maps.LatLng(32.819604, 35.073026),
new google.maps.LatLng(32.817169, 35.071321),
new google.maps.LatLng(32.817097, 35.071353),
new google.maps.LatLng(32.816042, 35.073391),
new google.maps.LatLng(32.818513, 35.075119),
new google.maps.LatLng(32.818612, 35.075054)
];
Run Code Online (Sandbox Code Playgroud)
我想实现:将标签和标记放在标记的红色区域的中间(大约).
而不是使用静态纬度和经度(我有很多区域)
有一种方法可以这样做吗?
我需要找到一个凸多边形的最大内切圆,我搜索了很多网站,我知道这可以通过使用 Delaunay 三角剖分来完成。我在 CGAL 讨论中找到了一个使用 CGAL 的算法的线程:
您可以使用 CGAL 轻松计算:
首先,计算点的 Delaunay 三角剖分。
然后,迭代三角剖分的所有有限面。对于每个有限面 f
- 计算它的外心 c
- 在三角剖分中定位 c(为了加快速度,您可以将 f 的一个顶点作为点位置的起始提示)
- 如果 locate(c,hint) 返回的面是有限的,则外心 c 位于点的凸包中,因此,f 是候选者
- 如果 f 是这样的候选人脸,计算它的平方外接圆半径,只保留最小平方外接圆半径的脸
CGAL 手册(第 2 章 2D 三角剖分,以及内核中的一些内容)显示了执行此操作的每个基本功能。
我对这个算法的最后一部分有点困惑。当我阅读它时,我从中了解到三角剖分面的最小外接半径是最大内切圆的半径。但是从使用 Delaunay 三角剖分的多边形示例来看,似乎即使是最小的外接圆有时也无法放入多边形内,那么它如何与最大的内切圆具有相同的半径?
我想找到最大的轮廓刻字圆.
我已经检测到轮廓cv::findContours并且它在那里作为a vector<Point>.
我知道如何检测最小的封闭圆(cv::minEnclosingCircle),但不知道如何获得最大的封闭圆.这该怎么做?
问题2:我如何获得以质心为中心的刻字和限定圆圈?
为了澄清,我试着用这些关注来描述我的意思: