是否有一种算法可以使用有限数量的线段和圆弧(恒定曲率)来近似表示平面上的路径(即由x和y定义的有序点序列)?生成的曲线需要具有C1连续性(斜率连续性)。
线段和圆弧的最大数量可以是一个参数。另一个有趣的限制是防止两个相邻的圆弧之间没有中间线段连接。
我没有看到任何方法可以做到这一点,也不认为存在一种方法,但对于此目标的任何提示都是受欢迎的。
示例:
考虑这条路径。它看起来像一条直线,但实际上是一组非常接近的有序点。没有噪音,点序列的顺序是众所周知的。我想用最少的线段和圆弧(比如10个线段和10个圆弧)以及C1连续性来逼近这条曲线。线段/圆弧的数量不是目标本身,但我需要任何可以减少/增加这个数量以达到参数化简单化的参数,以牺牲精度为代价。
解决方案:
这是我的解决方案,基于Spektre的答案。红色曲线是原始数据。黑色线段是线段,蓝色曲线是圆弧。绿色十字架是圆弧中心,显示半径,蓝色十字架是线段可能连接的点。
- 基于斜率最大偏差和线段最小长度作为参数,检测线段。新线段步长的斜率与现有线段的平均步长进行比较。我更喜欢基于优化的方法,但我认为对于未知数量、位置和长度的不连续线段不存在这样的方法。
- 使用切线弧连接线段以闭合系统,半径选择使得线段的端点移动最小。出于我的目的,添加了最小半径约束。我相信在拐点很远时(例如,线条几乎平行)并且与相邻线段交互时,会有一些特殊情况需要处理。