寻找一种有效的算法来确定扫描二维形状的边界



我有分段曲线定义生成器(想象一下画笔)和分段曲线表示画笔遵循的路径。我希望生成生成器曲线在扫过路径时创建的边界。

这是一个类似工程CAD的应用程序。我正在寻找一个通用的算法或代码样本在任何语言。

我建议以下论文:

  • "二维弯曲物体的近似一般扫描边界",作者:Ahn Jae-Woo, Kim Myung-Soo和Soon-Bum Lim
  • "Real Time Fitting of Pressure brushes " by Thierry Pudet
  • "图形规范的刷-轨迹方法:一些代数解"

我们使用的实际答案太复杂了,不能全文发布,只能做个总结。

  1. 沿着变换后的路径每隔一段时间采样曲线
  2. 通过连接每个样本的顶点来构建三角形网格下一个和上一个示例
  3. 确定候选轮廓边缘,其相邻三角形法线指向相反方向
  4. 使用宽线算法分割十字路口的所有边缘。这是一个棘手的部分,因为我们发现我们必须使用BigRational算法或微妙的数值错误来实现这一点,这会破坏拓扑结构。
  5. 将分割边转换为平面图
  6. 找到离某个外部测试点最近的分割边
  7. 绕图的外侧走一圈。(同样,所有的测试都使用大的rational)

    由于BigRational的计算,该算法的性能并不出色。然而,我们尝试了很多方法在浮点中做到这一点,我们总是得到数值边,结果图不是平面的。如果图形不是平面的,那么你就不能绕着它的外面走。

如果你有一个任意复杂的形状沿着任意路径平移和旋转,使用精确的方法计算出扫描的面积(及其边界)将是一个非常棘手的问题。

你可以考虑使用基于呈现的方法:

  1. 以黑色画布开始
  2. 对移动形状的路径进行密集采样
  3. 对于每个样本位置和旋转,将形状渲染为白色
  4. ,你现在有一个相当好的估计扫过的形状的画布

您可以按照以下步骤执行:

  • (可选)做一些图像处理,试图修复由于过于稀疏地采样形状路径而引入的任何伪影
  • (可选)将画布通过边缘查找过滤器以获得扫描形状的边界

最新更新