代码实现
scipy.optimize.leastsq
最小二乘法拟合圆心和半径 ,转化为所有点到圆心(xc, yc)距离与半径Rc的差最小问题,表达式如下,再通过scipy中的最小二乘算法进行求解即可。
因为圆半径等于所有点到圆心的平均距离,所以一旦圆心得到了,就可以直接求得半径
Ri = sqrt( (x - xc)**2 + (y - yc)**2)
residu = sum( (Ri - Rc)**2)
展示一个例子
from numpy import *
# Coordinates of the 2D points
x = r_[ 9, 35, -13, 10, 23, 0]
y = r_[ 34, 10, 6, -14, 27, -10]
basename = 'circle'
x_m = mean(x)
y_m = mean(y)
# Decorator to count functions calls
import functools