将椭圆弧拟合到点或其他曲线

Fitting elliptical arcs to points or other curves

我正在努力将椭圆弧拟合到某些点。这些点要么来自线段,要么来自同一折线的所有部分,或者它们是从贝塞尔曲线生成的。我基本上有两个问题:

  1. 如果合理的话,我想用椭圆弧拟合点,如果更适合的话,我想用直线拟合。我正在考虑从第一点开始,然后构建一条线和一个 ellip_arc 到下一个点。错误最少的获胜。或者至少是类似的东西。问题是椭圆有很多自由参数而不是直线。那么我怎样才能将椭圆弧拟合到这些点呢?它也必须在点开始和停止。

  2. 椭圆弧参数化后拟合似乎最简单。尽管我发现很难定义弧的起点和终点。但是,作为输出,我需要像 SVG 格式一样描述椭圆(中心点、短轴和长轴、旋转到 x 轴等 https://www.w3.org/TR/SVG2/paths.html#PathDataEllipticalArcCommands)。我不确定如何转换为这种表示形式,或者我是否可以像这样适合它?

参见:

  • Circular approximation of polygon (or its part)

如果根据半径和中心的局部变化为曲线样本计算此值,则可以对属于同一椭圆的曲线部分及其偏心率和/或 a,b 半轴大小、中心和方向来简化你的拟合......即使没有得到精确的值,它也将是椭圆参数拟合的起点和范围,极大地提高了拟合的速度和稳定性

如果您的数据有足够大的椭圆块,则可以直接获取一些椭圆参数,请参见:

像参数一样完全拟合 SVG 会非常慢,更容易的方法是首先只拟合椭圆 (center,a,b,rotation) 然后 convert/fit 到 SVG 形式的椭圆弧。参见:

最后你可以使用任何拟合算法我最喜欢的是这个:

我不会用 C# 编写代码,所以我不知道是否有任何现有的此类任务包。