C#使用最小二乘法对多个离散点进行圆拟合
/// <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#使用最小二乘法对多个离散点进行圆拟合的更多相关文章
- 最小二乘法多项式曲线拟合原理与实现 zz
概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...
- 算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)
http://blog.csdn.net/guduruyu/article/details/72866144 最小二乘法多项式曲线拟合,是常见的曲线拟合方法,有着广泛的应用,这里在借鉴最小二乘多项式曲 ...
- OPEN CASCADE Gauss Least Square
OPEN CASCADE Gauss Least Square eryar@163.com Abstract. The least square can be used to solve a set ...
- Excel教程(13) - 统计函数
AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该 函数可以评测数据(例如学生的某科考试成绩)的离散度. 语法:AVEDEV(number1,number2,...) 参数:Number ...
- Android/Linux Thermal Governor之IPA分析与使用
IPA(Intelligent Power Allocator)模型的核心是利用PID控制器,Thermal Zone的温度作为输入,可分配功耗值作为输出,调节Allocator的频率和电压值. 由P ...
- 基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...
- lsqnonlin函数使用方法
非线性最小二乘函数 lsqnonlin 格式x = lsqnonlin(fun,x0) %x0 为初始解向量:fun为,i=1,2,-,m,fun返回向量值F,而不是平方和值,平方和隐含在方法中, ...
- .net core(c#)拟合圆测试
说明 很多时候,我们需要运动物体的转弯半径去描述其机器性能.但在大多数的现实条件下,我们只能够获取到运动物体的 GPS 位置点集,并不能直接得到转弯半径或者圆心位置.为此,我们可以利用拟合圆的方式得到 ...
- 浅谈P/NP问题
克雷数学研究所(Clay Mathematics Institute,CMI)是在1998年由商人兰顿·克雷(Landon T. Clay)和哈佛大学数学家亚瑟·杰夫(Arthur Jaffe)创立, ...
随机推荐
- xtrabackup增量备份MySQL-5.7操作说明
下载工具 本方法利用xtrabackup二进制包,版本是2.4.26 # 从官网下载二进制包:wget https://downloads.percona.com/downloads/Percona- ...
- 食之无味?App Startup 可能比你想象中要简单
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- Currtid 函数与性能问题
对于Oracle ,一条tuple 的 rowid正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表收缩),因此,应用设计上可以方便的使用rowid,加快访问速度 ...
- QT学习(四)----360界面制作(1)
参照网上的资料,模仿了一份360新特效的界面. 源代码在:http://download.csdn.net/detail/zhangyang1990828/5238013 360真实效果:(最好自己打 ...
- ConcurrentDictionary<T,V> 的这两个操作不是原子性的
好久不见,马甲哥封闭居家半个月,记录之前遇到的一件小事. ConcurrentDictionary<TKey,TValue>绝大部分api都是线程安全且原子性的, 唯二的例外是接收工厂委托 ...
- ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...
- Docker镜像仓库Harbor之Swagger REST API整合配置
转载自:https://cloud.tencent.com/developer/article/1010618 1.Swagger 介绍 Swagger 是一个规范和完整的框架,用于生成.描述.调用和 ...
- 9_SpringBoot
一. SpringBoot介绍 1.1. 引言 为了使用SSM框架去开发, 准备SSM框架的模板配置 为了使Spring整合第三方框架, 单独的去编写xml文件 导致SSM项目后期xml文件特别多, ...
- DophineSheduler上下游任务之间动态传参案例及易错点总结
作者简介 淡丹 数仓开发工程师 5年数仓开发经验,目前主要负责百得利MOBY新车业务 二手车业务及售后服务业务系统数仓建设 业务需求 在ETL任务之间调度时,我们有的时候会需要将上游的 ...
- 给nsis窗口添加立体阴影
利用SetClassLong函数给nsis窗口添加了阴影,看起来很酷^_^ System::Call `user32::SetClassLong(i$HWNDPARENT,i${GCL_STYLE}, ...