用有限数量的线段和圆弧逼近曲线

seb*_*007 5 algorithm geometry computational-geometry

是否有任何算法可以使用有限数量的线段和圆弧(恒定曲率)来逼近 xy 平面(即由 x 和 y 定义的有序点集)上的路径?结果曲线需要是 C1(斜率的连续性)。

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

我看不出有任何方法可以做到这一点,我认为不存在针对它的方法,但欢迎对此目标的任何暗示。

例子:

示例文件可在此处获得

由一组点定义的离散路径

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

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

解决方案:

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

配件

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

age*_*ntp 2

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

我建议这个算法,

1 与一组(指定 N 条)直线段最佳拟合。(当然有成熟的算法。)

2 考虑将直线段固定并在每个接头处放置一个圆弧。单独处理每个关节,我认为您有一个易于处理的问题来找到最佳的圆弧中心/半径以满足连续性并改善配合。

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