------------------圆拟合-----------------

在http://www.cnblogs.com/dotLive/archive/2007/04/06/524633.html和http://blog.csdn.net/liyuanbhu/article/details/50889951中都对最小二乘法圆拟合的原理进行了介绍,下面直接用一下,方便对代码理解:

下面给出使用上述方法的圆拟合代码:code1(C)

struct Point{
double x;
double y;
bool FitCicle(const double* X, const double* Y, const int Len, Point* Center, double* Radius)
{if (Len < 3) return false;double* xx = (double*)malloc(sizeof(double)*Len);if (!xx) return false;memcpy(xx,X, sizeof(double)*Len);double* yy = (double*)malloc(sizeof(double)*Len);if (!yy){free(xx);return false;}memcpy(yy, Y, sizeof(double)*Len);double X1,X2, X3,Y1,Y2,Y3,X1Y1,X1Y2,X2Y1;X1=X2=X3=Y1=Y2=Y3=X1Y1=X1Y2=X2Y1=0;int i = 0;bool Equalx = false, Equaly = false;for (i = 0; i < Len; i++){X1 = X1 + xx[i];Y1 = Y1 + yy[i];if (yy[i] != Y1 / (i + 1)){Equaly = true;}if (xx[i] != X1 / (i + 1)){Equalx = true;}X2 = X2 + xx[i] * xx[i];Y2 = Y2 + yy[i] * yy[i];X3 = X3 + xx[i] * xx[i] * xx[i];Y3 = Y3 + yy[i] * yy[i] * yy[i];X1Y1 = X1Y1 + xx[i] * yy[i];X1Y2 = X1Y2 + xx[i] * yy[i] * yy[i];X2Y1 = X2Y1 + xx[i] * xx[i] * yy[i];}if(!Equalx||!Equaly){free(xx);free(yy);return false;}double C, D, E, G, H, N;double a, b, c;N = iLen;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 + 1e-10);b = (H*C - E*D) / (D*D - G*C + 1e-10);c = -(a*X1 + b*Y1 + X2 + Y2) / (N + 1e-10);Center->dX = a / (-2);Center->dY = b / (-2);double dTemp = a*a + b*b - 4 * c;if (dTemp < 0){free(xx);free(yy);return false;}*Radius = sqrt(dTemp) / 2;free(xx);free(yy);return true;
}

------------------球拟合-----------------

同样的,使用最小二乘法进行球拟合,(x-x0)^2+(y-y0)^2+(z-z0)^2=R^2,下面给出的matlab代码,代码中X.txt等三个文件是我自己生成的球数据,分别存放X,Y,Z坐标:

%%球拟合,求出球心位置,及球的直径
clc;clear all;close all;
x=dlmread('X.txt'); %球的x坐标
y=dlmread('Y.txt');  %球的y坐标
z=dlmread('Z.txt');  %球的z坐标
data=unique([x(:),y(:),z(:)],'rows');
f=@(p,data)(data(:,1)-p(1)).^2+(data(:,2)-p(2)).^2+(data(:,3)-p(3)).^2-p(4)^2;
p=nlinfit(data,zeros(size(data,1),1),f,[0 0 0 1]');%拟合的参数??
hold on
plot3(data(:,1),data(:,2),data(:,3),'c*')
[X,Y,Z]=meshgrid(linspace(-14,14));
V=(X-p(1)).^2+(Y-p(2)).^2+(Z-p(3)).^2-p(4)^2;
isosurface(X,Y,Z,V,0);
alpha .5;
camlight;axis equal;grid on;view(3);
title(sprintf('(x- %f)^2+(y- %f)^2+(z- %f)^2=%f^2',p(1),p(2),p (3),p(4)))

参考:

http://blog.csdn.net/liyuanbhu/article/details/50890587

http://buaagc.blog.163.com/blog/static/7278839420095115218810

http://blog.sina.com.cn/s/blog_703f59920100n4zm.html

圆拟合与点云数据球拟合算法相关推荐

  1. matlab使用自带的拟合工具cftool对数据进行拟合并生成拟合函数代码

    在数据处理中经常会需要对数据进行拟合,拟合完成之后可以通过拟合曲线的方程对数据进行预测.下面主要介绍一下如何适用matlab自带的拟合工具包对数据进行拟合,全程不需要编写一句代码,拟合完成之后还能生成 ...

  2. matlab多面函数拟合法拟合点gps水准数据 格式,拟合内插论文,关于沿海地区GPS水准模型构建相关参考文献资料-免费论文范文...

    导读:本文关于拟合内插论文范文,可以做为相关论文参考文献,与写作提纲思路参考. (辽宁省交通高等专科学校,辽宁 沈阳 110122) [摘 要]为提高GPS水准高程测量的精度以及解决测区内高程数据建模 ...

  3. 基于最小二乘法的磁力计椭球拟合方法

    基于最小二乘法的磁力计椭球拟合方法 在写飞控代码时,必然要对磁力计的测量数据进行校正,本文将介绍一种简单实用的校正方法–基于最小二乘法的椭球拟合方法. 本文椭球拟合部分来自博文IMU加速度.磁力计校正 ...

  4. 3D点云处理:拟合平面_优化后的最小二乘法

    文章目录 0. 拟合效果 1. 论文:一种稳健的点云数据平面拟合方法 1.1 优化过程 2. 参考 关联内容: 3D点云处理:拟合平面_最小二乘法_1 0. 拟合效果 左(拉格朗日乘子法求解)中(SV ...

  5. mysql将数据拟合曲线_强大的matlab数据科学拟合库cftool——直接导入数据进行拟合...

    (转载作者请注明出处) 废话不多说,直接上货.... 对于使用过matlab做数据处理的人来说,拟合是将平面上一系列的点,用一条光滑的曲线连接起来.因为这条曲线有无数种可能,从而有各种拟合方法.拟合的 ...

  6. 点云平面提取_基于LiDAR点云数据滤波方法

    基于LiDAR点云数据滤波方法 机载激光雷达所获取的数据被称为"点云(points cloud)"它在三维空间中呈现出随机分布的形状.在点云中,有些点属于真实的地形表面的点,有些点 ...

  7. 姿态估计算法汇总|基于RGB、RGB-D以及点云数据

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Tom Hardy@知乎 来源丨https://zhuanlan.zhihu.com/p/305 ...

  8. 企业双11业绩增长156% 、成交额突破151亿元...... 这背后是阿里云数据中台的场景赋能

    红星美凯龙天猫数字化卖场累计成交金额突破151.52亿元:杜蕾斯全网销售额突破1.7亿元,天猫官方旗舰店销售额同比增长105%:滴露全网销售额突破1.8亿元,天猫官方旗舰店销售额同比增长156%:波司 ...

  9. 29 基于PCL的点云平面分割拟合算法技术路线(针对有噪声的点云数据)

    0 引言 最近项目中用到了基于PCL开发的基于平面的点云和CAD模型的配准算法,点云平面提取采用的算法如下. 1 基于PCL的点云平面分割拟合算法 2 参数及其意义介绍 (1)点云下采样 1. 参数: ...

  10. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

    目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...

最新文章

  1. 20175317 《Java程序设计》第一周学习总结
  2. python class和def的区别_Python中class和def的理解
  3. 建造者模式 coding
  4. 2 HTML中的body和它的默认样式
  5. ip 包流量分析程序_【干货】西门子S7300六大流量异常场景检测
  6. 【问题解决】解决创建Android模拟器时提示“No system images installed for this target“的问题
  7. spark rdd详解二(transformation与action操作)
  8. windows10应用商店加速方法
  9. MPQ Storm库 源码分析 一
  10. 计算机考研408每日一题 day161
  11. 赛事+内容IP齐发力,汽车之家打破Z世代次元壁
  12. 文件误删除如何找回呢?四步妙招解决
  13. elasticsearch,使用normalizer优化keyword字段的查询
  14. CentOS 8.3.2011 镜像在PC上安装选择安装源时提示:设置基础软件仓库时出错
  15. 如何培养你自己独特的领导风格?
  16. 魔法少女小圆计算机音乐,求魔法少女小圆一些背景音乐的名字
  17. VOS客户端上服务器和软交换状态显示红灯的原因分析
  18. 强大的图片预览组件Viewer.js
  19. 算法总结(六)Isomap(Isometric mapping等度量映射)和LLE(Locally Linear Embedding)的理解
  20. MVC |分部视图 PartialView()

热门文章

  1. Android之apk优化
  2. keyset与entryset
  3. C# WinForm 数据库连接及对数据库的相关操作(未使用证实)
  4. 干货干货:px和毫米之间的转换
  5. 38. Model has-a or is-implemented-in-terms-of through composition
  6. syslog收到的日志存放在哪里_Linux使用RsyslogServer记录远程主机系统日志
  7. 安卓虚拟键盘_微软双屏Surface Duo上的安卓应用体验:可瞬间变身笔记本电脑
  8. win10的js文件-bat脚本-开启移动热点
  9. html5 游戏 算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
  10. python数据环境的搭建_Python数据分析环境搭建