/// <summary>
/// 最小二乘法拟合圆,计算拟合圆半径和拟合圆圆心
/// </summary>
/// <param name="points">拟合点</param>
/// <returns>返回拟合圆的计算结果</returns>
public double[] FittingCircleByLeastSquare(List<Point> points)
{
//最小二乘法拟合圆
///https://blog.csdn.net/qq_31253399/article/details/107306569
double U_i = 0, V_i = 0, U_c = 0, V_c = 0;
double X = points.Average(p => p.X), Y = points.Average(p => p.Y);
double S_uuu = 0, S_vvv = 0, S_uvv = 0, S_uuv = 0;
double S_uu = 0, S_vv = 0, S_uv = 0;
for (int i = 0; i < points.Count; i++)
{
U_i = points[i].X - X;
V_i = points[i].Y - Y;
S_uuu += Math.Pow(U_i, 3);
S_uuv += Math.Pow(U_i, 2) * V_i;
S_uuu += Math.Pow(U_i, 3);
S_uvv += Math.Pow(V_i, 2) * U_i;
S_uu += Math.Pow(U_i, 2);
S_vv += Math.Pow(V_i, 2);
S_uv += U_i * V_i;
}
U_c = (S_uuv * S_uv - S_uuu * S_vv - S_uvv * S_vv + S_uv * S_vvv) / 2 * (S_uv * S_uv - S_uu * S_vv);
V_c = (S_uuu * S_uv - S_uuv * S_uu - S_uu * S_vvv + S_uv * S_uvv) / 2 * (S_uv * S_uv - S_uu * S_vv);
//计算拟合圆圆心坐标
double X_c = U_c + X;
double Y_c = V_c + Y;
//计算R
double R = points.Sum(p => ((p.X - X_c) * (p.X - X_c) + (p.Y - X_c) * (p.Y - Y_c)));
return new double[3] { X_c, Y_c, R };
}

C#使用最小二乘法对多个离散点进行圆拟合的更多相关文章

  1. 最小二乘法多项式曲线拟合原理与实现 zz

    概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...

  2. 算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)

    http://blog.csdn.net/guduruyu/article/details/72866144 最小二乘法多项式曲线拟合,是常见的曲线拟合方法,有着广泛的应用,这里在借鉴最小二乘多项式曲 ...

  3. OPEN CASCADE Gauss Least Square

    OPEN CASCADE Gauss Least Square eryar@163.com Abstract. The least square can be used to solve a set ...

  4. Excel教程(13) - 统计函数

    AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该 函数可以评测数据(例如学生的某科考试成绩)的离散度. 语法:AVEDEV(number1,number2,...) 参数:Number ...

  5. Android/Linux Thermal Governor之IPA分析与使用

    IPA(Intelligent Power Allocator)模型的核心是利用PID控制器,Thermal Zone的温度作为输入,可分配功耗值作为输出,调节Allocator的频率和电压值. 由P ...

  6. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  7. lsqnonlin函数使用方法

    非线性最小二乘函数  lsqnonlin  格式x = lsqnonlin(fun,x0) %x0 为初始解向量:fun为,i=1,2,-,m,fun返回向量值F,而不是平方和值,平方和隐含在方法中, ...

  8. .net core(c#)拟合圆测试

    说明 很多时候,我们需要运动物体的转弯半径去描述其机器性能.但在大多数的现实条件下,我们只能够获取到运动物体的 GPS 位置点集,并不能直接得到转弯半径或者圆心位置.为此,我们可以利用拟合圆的方式得到 ...

  9. 浅谈P/NP问题

    克雷数学研究所(Clay Mathematics Institute,CMI)是在1998年由商人兰顿·克雷(Landon T. Clay)和哈佛大学数学家亚瑟·杰夫(Arthur Jaffe)创立, ...

随机推荐

  1. 【2022-09-09】Django框架(九)

    Django框架(九) cookie与session简介 网址的发展史: 1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的. 比如:新闻网页,博客网页,小说... (这些网页是不 ...

  2. k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景

    k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...

  3. Windows 10无法显示无线网络连接

    最近刚刚升级了一下操作系统,升级到了1903版本.正好又有一个HP的打印机安装了一下.结果,发现居然无法管理无线网络了.如果看不到图,请点我. 右击选择连接,也无法显示SSID. 驱动是从这个官网下载 ...

  4. SSH 克隆跟HTTP 克隆地址的区别

    1.使用SSH 克隆 需要事先把本机生成的SSH公钥配置到项目中,然后直接复制ssh克隆地址就能直接克隆了 2.使用HTTP克隆 可以不配置本机的SSH公钥,但是克隆时需要使用项目用户的账号密码登录进 ...

  5. Elasticsearch:ICU分词器介绍

    ICU Analysis插件是一组将Lucene ICU模块集成到Elasticsearch中的库. 本质上,ICU的目的是增加对Unicode和全球化的支持,以提供对亚洲语言更好的文本分割分析. 从 ...

  6. Kibana: 运用Data Visualizer来分析CSV数据

  7. EFK-2:ElasticSearch高性能高可用架构

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483811&idx=1&sn=a413dea65f ...

  8. Request Body Search

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-using.html

  9. Docker部署ELK

    这里不采用逐个docker镜像的方式,而是直接使用elk三者聚合在一起的镜像. 镜像地址:https://hub.docker.com/r/sebp/elk 前提操作: $ vim /etc/sysc ...

  10. LeetCode - 数组遍历

    1. 485. 最大连续 1 的个数 1.1 分析题意 首先:我们求的是连续的1的个数,所以我们不能也没必要对数组进行排序: 其次:只要求求出最大连续1的个数,并不要求具体的区间数目,所以我们只需要用 ...