近似具有有限数量的线段和圆弧的曲线

时间:2017-03-24 09:27:26

标签: algorithm geometry computational-geometry

是否有任何算法允许近似x-y平面上的路径(即由x和y定义的有序点集合),其中有限数量的线段和圆弧(恒定曲率)?得到的曲线需要为C1(斜率的连续性)。

最大数量或段和弧可以是参数。另一个有趣的限制是防止两个连续的圆弧,而没有连接它们的中间线段。

我认为没有办法做到这一点,我认为没有办法解决这个问题,但是对此目标的任何暗示都是值得欢迎的。

示例:

Sample file available here

Discrete path defined by a suite of points

考虑这条道路。它看起来像一条线,但实际上是一个非常接近点的有序套件。没有噪音,点序列的顺序是众所周知的。

我想用最小数量的连续线段和圆弧(比如说10个线段和10个圆弧)和C1连续性来近似这条曲线。段/弧的数量本身并不是一个目标,但我需要任何参数来减少/增加这个数量,以达到参数化的某些简单性,但代价是精度损失。

解决方案:

根据Spektre的回答,这是我的解决方案。红色曲线是原始数据。黑线是段,蓝色曲线是圆弧。绿色十字形是弧形中心,半径显示,蓝色十字形是可能连接的区域。

Fitting

  1. 基于斜率最大偏差和段最小长度作为参数来检测线段。将新分段步骤的斜率与现有分段的平均步长进行比较。我更喜欢基于优化的方法,但我认为它不存在具有未知数量,位置和长度的不相交段。
  2. 使用切线弧连接线段。为了关闭系统,选择半径使得段末端移动得最少。为我的目的添加了最小半径约束。我相信在拐点处会有一些特殊情况需要处理(例如线条几乎平行)并与neigboring段相互作用。

3 个答案:

答案 0 :(得分:2)

所以你得到了一个点云......对于这样的通常,靠近在一起的点被认为是连接的,所以:

  1. 您需要添加有关哪些点接近哪些点的信息

    点仅关闭信号曲线/线内部的2个邻居。只有一个邻居意味着曲线/线的终点,然后多于2表示交叉或太近的几乎或平行的线/曲线。没有邻居意味着噪音或只是一个点。

  2. 将路径段组合在一起

    这称为连通成分分析。因此,您需要从邻居信息表格中形成折线。

  3. 检测线性路径块

    这些在相邻段之间具有相同的斜率,因此您可以将它们连接到单行。

  4. 将其余部分与曲线相匹配

  5. 此处有相关的质量保证:

    [Edit1]数据上#3的简单线路检测

    我使用5.0 deg角度变化作为线条的阈值,并且将检测到的线条的最小尺寸用作50个样本(假设恒定点密度,懒得计算长度)。结果如下:

    lines

    点是检测到的线端点,绿线是检测到的线,白色“线”是曲线,所以我现在看不出这种方法有任何问题。

    现在问题在于左边的点(曲线)我认为应该还有几何方法,因为它只是圆弧,所以像这样

    这也可能有所帮助:

答案 1 :(得分:1)

C1要求要求必须具有交替的直线和弧线。还要意识到,如果允许足够数量的线段,您可以通过直线轻松地适合每对点,并使用微小弧线来满足斜率连续性。

我建议使用此算法,

1最适合一组(指定的N)直段。 (当然有很好的算法。)

2考虑固定的直线段和每个关节处的弧形。单独处理每个关节我认为你有一个易处理的问题,找到最佳的弧中心/半径,以满足连续性和改善拟合。

3现在您已经非常接近尝试将所有圆弧中心和半径(由相切定义的线段)视为全局优化问题。如果N很大,这当然会爆炸。

答案 2 :(得分:0)

当通过某个其他曲线逼近给定曲线时的典型约束是将近似曲线绑定到原始曲线内的epsilon-hose(如果Minkowski sum,则使用固定半径为epsilon的磁盘)。

对于具有biarcs的G1或C2连续近似(来自CNC / CAD的人)(并且直线段可以看作具有无限半径的弧),我的同事开发了一种算法,给出了类似的解决方案这[点击放大]:

Sample solution

以上图片来自项目网站:https://www.cosy.sbg.ac.at/~held/projects/apx/apx.html

算法很快,也就是说,它在O(n log n)时间内运行,并且基于广义的Voronoi图。但是,它没有给出具有确切最小元素数的近似值。如果你寻找理论上的最优,我会参考Drysdale等人的论文,Approximation of an Open Polygonal Curve with a Minimum Number of Circular Arcs and Biarcs,CGTA,2008。