我正在为Waze开发开源JavaScript插件 - 众所周知的免费GPS导航器 - 专门用于online editor。这个用户的想法是可以快速选择大的统一彩色地图区域,将它们转换为地标。
到目前为止,我已经successfully implemented在Photoshop等图形编辑器中称为“Magic Wand”的工具:用户点击地图上的某个位置(例如,在湖泊或森林上),脚本选择覆盖的整个区域相同的颜色并为地标创建一个多边形。
一切都很好,除了我使用凸壳算法来获得......好......凸壳:)这是:连接找到的点云的最外点的多边形。
但是每个人都知道只有少数地标有凸形,而大多数现实世界的物体都有凹形区域的折线形状。在上图中你可以看到该区域有很少的锋利边缘,右下角的农田被凸包覆盖 - 这是错误的。
我正在谷歌搜索合适的算法和挖掘数学论文,但仍然没有找到一个运气。关于Stackoverflow上的凹壳的The most popular question是指Alpha形状以及Delaunay三角形。虽然我不明白如何使用它以防万一:所有的点都相互连接形成一条连续的折线,因此我似乎找不到合适的alpha半径作为半径等于1像素的偶数圆,并且是α暴露的。
如何归档建造凹形船体的目标的任何想法将非常感谢!可能是我朝错误的方向前进,需要查看位图矢量化算法吗?
答案 0 :(得分:2)
通过找到一组点的delaunay三角剖分然后删除超过alpha的边来定义Alpha形状。你需要delaunay三角测量而不是圆圈。它也适用于线条。要使用JS计算形状,您可以使用TopoJSON或尝试此答案:Calculate bounding polygon of alpha shape from the Delaunay triangulation。您也可以尝试我的php包http://concavehull.codeplex.com/。
答案 1 :(得分:1)