用于多边形顶点缩减的库保持几乎相同的形状

时间:2013-03-26 11:08:57

标签: c++ polygon

我正在使用多边形裁剪库Clipper的c ++版本,我想减少多边形中的顶点数量,保持几乎相同的形状。

作为附加要求,我必须“仅向外”逼近我的多边形:得到的简化多边形必须与原始多边形相同。

我想到了:

  • 凸包,它满足“仅外向”条件,但它过多地简化了我的多边形
  • Ramer-Douglas-Peucker algorithm,这很好,因为它让我选择错误但它不满足“仅外向”条件。

然后我看了psimpl library,我的要求最接近的算法似乎是Opheneim algorithm

  

使用最小和最大距离公差来约束搜索区域

但最小距离不能为0.

这个问题有什么可能的解决办法吗?你知道任何解决它的c ++库吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试迭代多边形并执行:

  1. 如果顶点是凹的并且到行的距离,则连接邻居顶点< tolerance,而不是删除它。

  2. 如果顶点是凸的,请考虑先前的segemnt位于第L1行,进一步迭代,而L1与包含下一个线段的线相交,位于多边形外的点P中从P到多边形的距离< tolerance,并将段的开头距离L1< tolerance。当该迭代停止时(不是第一次迭代),删除中间点,插入交叉点(如果当前在多边形内,则为前一个,如果在边界上,则为当前)。

  3. 保持迭代多边形,同时简化发生。还要确保保留旧点以检查容差(例如,您可以枚举顶点,并在简化时删除索引,但在检查容差时,也检查中间索引)

    这不是超快算法,而是做你想要的。

    Examples