当前位置: 首页 > article >正文

python之拟合圆心及半径

目录

1、公式推导

2、代码实现


1、公式推导

2、代码实现

import matplotlib.pyplot as plt
import numpy as np
def Show_Fig(X,Y,x, y, r):
    theta = np.arange(0, 2 * np.pi, 0.01)
    x = x + r * np.cos(theta)
    y = y + r * np.sin(theta)
    fig = plt.figure()
    axes = fig.add_subplot(111)
    axes.plot(x, y)
    axes.plot(X, Y,"r*")
    axes.axis('equal')
    plt.show()


def Fit_Circle(x=None, y=None):
    C = []
    A = []

    for i in range(len(x)):
        A.append([x[i], y[i], 1])
        C.append(np.square(x[i]) + np.square(y[i]))

    A = np.mat(A)
    B = np.dot(np.dot(np.linalg.inv(np.dot(A.T, A)), A.T), C)
    B = np.array(B, dtype='float32').flatten()
    return B[0]/2, B[1]/2, np.sqrt(B[2]+np.square(B[0])/4 + np.square(B[1])/4)


if __name__ == '__main__':
    # 定义圆的参数
    center_x = 1
    center_y = 2
    radius = 5

    # 生成圆上的点
    theta = np.linspace(0, 2 * np.pi, 100)  # 生成一个角度范围
    x = center_x + radius * np.cos(theta)  # x坐标
    y = center_y + radius * np.sin(theta)  # y坐标

    # 添加噪声
    noise = np.random.normal(0, 0.05, size=(100,))  # 生成一个标准正态分布的噪声
    X = x + noise
    Y = y + noise

    fitcenter_x, fitcenter_y, fitradius = Fit_Circle(x=X, y=Y)
    print(f"拟合得到的圆心是:({fitcenter_x}, {fitcenter_y}), 半径是:{fitradius}")
    Show_Fig(X,Y,fitcenter_x, fitcenter_y, fitradius)

​拟合得到的圆心是:(1.0052670240402222, 2.0036354064941406), 半径是:5.004283869935406


http://www.kler.cn/news/108757.html

相关文章:

  • Opencv-图像插值与LUT查找表
  • IntelliJ IDEA 把package包展开和压缩
  • Ubuntu 22.04自动登录进入桌面
  • Error: error:0308010C:digital envelope routines::unsupported
  • YOLOv7-QAT量化部署
  • 软考系统架构师知识点集锦二:软件工程
  • 51单片机实验:数码管动态显示00-99
  • Vert.x学习笔记-异步编程和响应式系统
  • 云安全-云原生技术架构(Docker逃逸技术-特权与危险挂载)
  • 外部中断0边沿触发
  • Docker中Failed to initialize NVML: Unknown Error
  • 3DMAX快速瓦片屋顶铺设插件使用方法详解
  • JavaScript进阶知识汇总~
  • Linux--进程替换
  • C++中的成员变量内存布局
  • MinIO安装
  • Ubuntu ARMv8编译Qt源码以及QtCreator
  • NEFU数字图像处理(三)图像分割
  • 安全狗安装
  • Angular-05:管道
  • ip地址默认子网掩码怎么算
  • 案例分析大汇总
  • IT行业就业热点与发展方向
  • 获取客户端请求IP及IP所属城市
  • postgresql14管理(六)-备份与恢复
  • MIT Kimera-VIO-ROS 安装
  • 一个阅读英文文档的记录与思考:
  • 【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6(数据预处理)
  • 智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应
  • Unity Spine 指定导入新Spine动画的默认材质