这个问题用最小二乘法是不能解的,因为求导之后是一个非线性的超定方程,这样就会变得非常复杂了,所以最好的方法还是用能量最小化的方法,我用高斯牛顿法试了一下,效果很好:
首先生成一堆点云,近似圆的形状
然后高斯牛顿法需要给定一个初始的圆心c和半径r,这个对结果影响不大,随机给定就可以了,比如c0=(0.4768, 0.0457, 0.0253), r0=0.0884
然后用高斯牛顿法进行迭代求解更新c和r,这个很快的,我用matlab迭代10次只需要7ms的时间,然后就得到了最终的c和r
具体的迭代算法推导过程是这样的,主要是雅可比矩阵的求解,其它都是标准过程