最小二乘法拟合圆公式推导及vc实现[r

简介:
最小二乘法(least squares analysis)是一种 数学 优化 技术,它通过 最小化 误差 的平方和找到一组数据的最佳 函数 匹配。 最小二乘法是用最简的方法求得一些绝对不可知的真值,而令误差平方之和为最小。 最小二乘法通常用于 曲线拟合 (least squares fitting) 。这里有 拟合圆曲线 的公式推导过程 和 vc实现。








VC实现的代码:
void  CViewActionImageTool::LeastSquaresFitting()
{
    
if (m_nNum<3)
    
{
        
return;
    }


    
int i=0;

    
double X1=0;
    
double Y1=0;
    
double X2=0;
    
double Y2=0;
    
double X3=0;
    
double Y3=0;
    
double X1Y1=0;
    
double X1Y2=0;
    
double X2Y1=0;

    
for (i=0;i<m_nNum;i++)
    
{
        X1 
= X1 + m_points[i].x;
        Y1 
= Y1 + m_points[i].y;
        X2 
= X2 + m_points[i].x*m_points[i].x;
        Y2 
= Y2 + m_points[i].y*m_points[i].y;
        X3 
= X3 + m_points[i].x*m_points[i].x*m_points[i].x;
        Y3 
= Y3 + m_points[i].y*m_points[i].y*m_points[i].y;
        X1Y1 
= X1Y1 + m_points[i].x*m_points[i].y;
        X1Y2 
= X1Y2 + m_points[i].x*m_points[i].y*m_points[i].y;
        X2Y1 
= X2Y1 + m_points[i].x*m_points[i].x*m_points[i].y;
    }


    
double C,D,E,G,H,N;
    
double a,b,c;
    N 
= m_nNum;
    C 
= N*X2 - X1*X1;
    D 
= N*X1Y1 - X1*Y1;
    E 
= N*X3 + N*X1Y2 - (X2+Y2)*X1;
    G 
= N*Y2 - Y1*Y1;
    H 
= N*X2Y1 + N*Y3 - (X2+Y2)*Y1;
    a 
= (H*D-E*G)/(C*G-D*D);
    b 
= (H*C-E*D)/(D*D-G*C);
    c 
= -(a*X1 + b*Y1 + X2 + Y2)/N;

    
double A,B,R;
    A 
= a/(-2);
    B 
= b/(-2);
    R 
= sqrt(a*a+b*b-4*c)/2;

    m_fCenterX 
= A;
    m_fCenterY 
= B;
    m_fRadius 
= R;

    
return;
}


工程下载
编译运行后随便打开一个图片,当然最好是全白的图片,然后就点吧,大于三个点后就会开始拟合。红线画的圆为拟合的圆,深蓝的点为鼠标点击设置的样本点。单击鼠标右键清空样本集。


本文转自 lu xu 博客园博客,原文链接:http://www.cnblogs.com/dotLive/archive/2006/10/09/524633.html   ,如需转载请自行联系原作者


相关文章
|
5月前
|
存储 SQL 前端开发
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
本节以“账本”为例,使用关系型数据库接口实现账单的增、删、改、查操作。通过创建ArkTSRdb应用,演示如何操作RdbStore进行数据管理,并结合界面按钮实现交互功能。
263 0
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
|
8月前
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
813 0
|
10月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
708 7
|
监控 安全 物联网
智能家居安全:保护您的家庭免受网络威胁##
随着物联网 (IoT) 技术的迅猛发展,越来越多的家庭设备连接到互联网,带来便利的同时,也增加了网络安全风险。本文将深入探讨智能家居设备的常见安全漏洞、潜在威胁以及防护措施,帮助您了解如何保护家庭免受网络威胁。 ##
|
9月前
|
数据采集 编解码 缓存
通义万相,开源!
通义万相,开源!
|
自然语言处理 算法 数据可视化
NLP-基于bertopic工具的新闻文本分析与挖掘
这篇文章介绍了如何使用Bertopic工具进行新闻文本分析与挖掘,包括安装Bertopic库、加载和预处理数据集、建立并训练主题模型、评估模型性能、分类新闻标题、调优聚类结果的详细步骤和方法。
NLP-基于bertopic工具的新闻文本分析与挖掘
|
Python
如何查询Python包的所有历史版本
如何查询Python包的所有历史版本
307 5
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。
|
JavaScript API
Vue3新的状态管理库-Pinia(保姆级别教程)
Vue3新的状态管理库-Pinia(保姆级别教程)
744 0
|
缓存 黑灰产治理
Autojs4.1.0实战教程---抖音极速版清理缓存
Autojs4.1.0实战教程---抖音极速版清理缓存
320 0