我正在使用多边形裁剪库Clipper的c ++版本,我想减少多边形中的顶点数量,保持几乎相同的形状。
作为附加要求,我必须“仅向外”逼近我的多边形:得到的简化多边形必须与原始多边形相同。
我想到了:
然后我看了psimpl library,我的要求最接近的算法似乎是Opheneim algorithm
使用最小和最大距离公差来约束搜索区域
但最小距离不能为0.
这个问题有什么可能的解决办法吗?你知道任何解决它的c ++库吗?
答案 0 :(得分:1)
您可以尝试迭代多边形并执行:
如果顶点是凹的并且到行的距离,则连接邻居顶点< tolerance
,而不是删除它。
如果顶点是凸的,请考虑先前的segemnt位于第L1
行,进一步迭代,而L1
与包含下一个线段的线相交,位于多边形外的点P
中从P
到多边形的距离< tolerance
,并将段的开头距离L1
< tolerance
。当该迭代停止时(不是第一次迭代),删除中间点,插入交叉点(如果当前在多边形内,则为前一个,如果在边界上,则为当前)。
保持迭代多边形,同时简化发生。还要确保保留旧点以检查容差(例如,您可以枚举顶点,并在简化时删除索引,但在检查容差时,也检查中间索引)
这不是超快算法,而是做你想要的。