寻找一种有效的算法来找到扫描2d形状的边界

时间:2013-06-06 19:56:48

标签: algorithm 2d cad

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

这适用于类似工程CAD的应用程序。我正在寻找任何语言的通用算法或代码示例。

3 个答案:

答案 0 :(得分:4)

我建议以下文件:

  • Jae-Woo Ahn,Myung-Soo Kim和Soon-Bum Lim的“2D弯曲物体的近似一般扫描边界”
  • “压力笔触的实时配件”作者:Thierry Pudet
  • “图纸规格的刷子轨迹方法:一些代数解决方案”

答案 1 :(得分:1)

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

您可以考虑使用基于渲染的方法:

  1. 以黑色帆布开始
  2. 密集地采样移动形状的路径
  3. 对于每个样品位置和旋转,将形状渲染为白色
  4. 你现在有一个画布,对扫掠形状有相当好的估计
  5. 您可以按照以下步骤进行操作:

    • (可选)进行一些图像处理以尝试修复由于过于稀疏地采样形状路径而引入的任何伪影
    • (可选)将画布传递到边缘搜索过滤器以获取扫掠形状的边界

答案 2 :(得分:1)

我们使用的实际答案太复杂了,无法完整发布,但总结一下。

  1. 沿着变换路径以固定间隔对曲线进行采样
  2. 通过连接每个样本的顶点来构建三角形网格 下一个和上一个样本
  3. 通过其相邻三角形法线指向相反方向来识别候选轮廓边
  4. 使用扫描线算法分割交叉点处的所有边。这是一个棘手的部分,因为我们发现我们必须使用BigRational算法或微妙的数字错误来破坏拓扑结构。
  5. 将分割边缘转换为平面图
  6. 找到最接近某个外部测试点的分割边缘
  7. 绕着图表的外部走动。 (再次使用大理性进行所有测试)

    由于BigRational计算,算法的性能并不高。然而,我们尝试了许多方法在浮点中执行此操作,并且我们总是得到数值边缘情况,其中结果图形不是平面的。如果图形不是平面的,那么你就不能在它的外面走动。