公司动态

最小二乘法拟合圆(PythonC++实现)

📅 2026/7/15 16:08:45
最小二乘法拟合圆(PythonC++实现)
方法一:矩阵计算法圆的方程可以表示为:R2=(x−A)2+(y−B)2(1) R^2 = (x-A)^2+(y-B)^2\tag{1}R2=(x−A)2+(y−B)2(1)展开后为:R2=x2−2Ax+A2+y2−2By+B2 R^2 = x^2-2Ax+A^2+y^2-2By+B^2R2=x2−2Ax+A2+y2−2By+B2令a=−2A,b=−2B,c=A2+B2−R2a=-2A,b=-2B,c=A^2+B^2-R^2a=−2A,b=−2B,c=A2+B2−R2:则式(1)(1)(1)可表示为:x2+y2+ax+by+c=0 x^2+y^2+ax+by+c=0x2+y2+ax+by+c=0−ax−by−c=x2+y2 -ax-by-c = x^2+y^2−ax−by−c=x2+y2矩阵形式可表示为:[−x1−y1−1−x2−y2−1⋯⋯⋯−xn−yn−1][abc]=[x12+y12x22+y22⋯xn2+yn2] \begin{gathered} \quad \begin{bmatrix} -x_1 -y_1 -1 \\ -x_2 -y_2 -1 \\ \cdots \cdots \cdots \\ -x_n -y_n -1 \end{bmatrix} \begin{bmatrix} a \\ b \\ c \end{bmatrix} = \begin{bmatrix} x_1^2+y_1^2 \\ x_2^2+y_2^2 \\ \cdots \\ x_n^2+y_n^2 \end{bmatrix} \end{gathered}​−x1​−x2​⋯−xn​​−y1​−y2​⋯−yn​​−1−1⋯−1​​​abc​​=​x12​+y12​x22​+y22​⋯xn2​+yn2​​​​得到R⋅A=YR \cdot A = YR⋅A=Y的矩阵形式后,便可利用A=(RT⋅R)−1⋅RT⋅YA = (R^T \cdot R)^{-1} \cdot R^T \cdot YA=(RT⋅R)−1⋅RT⋅Y得到a、b、ca、b、ca、b、c的值。Python代码为:defFit_Circle(x=None,y=None):ifxis