【问题标题】:Looking for an efficient algorithm to find the boundary of a swept 2d shape寻找一种有效的算法来找到扫过的二维形状的边界
【发布时间】:2013-06-02 23:47:45
【问题描述】:

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

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

【问题讨论】:

  • “边界”是什么意思?你说的是边界框吗?
  • 不,不是盒子。最简单的想法是任意形状的画笔。如果你把它压在纸上,然后沿着一条路径移动和旋转刷子,然后提起刷子,你就会得到一个形状。形状本身可以任意复杂。
  • 听起来像凸包问题en.wikipedia.org/wiki/Convex_hull
  • @StevenMaitlall,认为 OP 是指实体边界表示意义上的边界:en.wikipedia.org/wiki/Boundary_representation
  • 在 CAD 行业从事几何建模工作,我认识一些人,他们的大部分职业生涯都在解决这个问题。

标签: algorithm 2d cad


【解决方案1】:

我建议以下论文:

  • Jae-Woo Ahn、Myung-Soo Kim 和 Soon-Bum Lim 的“2D 曲面对象的近似一般扫描边界”
  • Thierry Pudet 的“压力笔触的实时拟合”
  • “图形规范的画笔轨迹方法:一些代数解决方案”

【讨论】:

    【解决方案2】:

    我们使用的实际答案过于复杂,无法完整发布,但要概括。

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

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

    【讨论】:

      【解决方案3】:

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

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

      1. 从黑色画布开始
      2. 密集采样移动形状的路径
      3. 对于每个样本位置和旋转,将形状渲染为白色
      4. 您现在有了一个可以很好地估计扫掠形状的画布

      您可以按照以下步骤跟进:

      • (可选)进行一些图像处理,以尝试修复因过于稀疏地采样形状路径而引入的任何伪影
      • (可选)将画布通过寻边过滤器以获取扫描形状的边界

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 2023-01-19
        • 2019-11-23
        • 1970-01-01
        • 2013-12-03
        • 2014-02-27
        • 1970-01-01
        相关资源
        最近更新 更多