MFC编写的圆拟合工具
通过最小二乘法计算圆心坐标及半径,显示残差V=B*dX-L
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 190976 2016-10-20 14:58 FittingCircleDebugFittingCircle.exe
文件 1280792 2016-10-20 14:58 FittingCircleDebugFittingCircle.ilk
文件 5213184 2016-10-20 14:58 FittingCircleDebugFittingCircle.pdb
文件 2162 2016-10-20 14:58 FittingCircleFittingCircleCircle.cpp
文件 497 2016-10-20 14:50 FittingCircleFittingCircleCircle.h
文件 57615 2016-10-20 14:58 FittingCircleFittingCircleDebugCircle.obj
文件 4030 2016-10-20 14:58 FittingCircleFittingCircleDebugcl.command.1.tlog
文件 69954 2016-10-20 14:58 FittingCircleFittingCircleDebugCL.read.1.tlog
文件 4570 2016-10-20 14:58 FittingCircleFittingCircleDebugCL.write.1.tlog
文件 915 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.exe.embed.manifest
文件 980 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.exe.embed.manifest.res
文件 640 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.exe.intermediate.manifest
文件 65 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.lastbuildstate
文件 3355 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.log
文件 30434 2016-10-20 14:51 FittingCircleFittingCircleDebugFittingCircle.obj
文件 33751040 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.pch
文件 70064 2016-10-20 14:57 FittingCircleFittingCircleDebugFittingCircle.res
文件 713 2016-10-20 11:38 FittingCircleFittingCircleDebugFittingCircle.vcxprojResolveAssemblyReference.cache
文件 0 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.write.1.tlog
文件 56553 2016-10-20 14:51 FittingCircleFittingCircleDebugFittingCircleDlg.obj
文件 216 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle_manifest.rc
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink-cvtres.read.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink-cvtres.write.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.3192-cvtres.read.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.3192-cvtres.write.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.3192.read.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.3192.write.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.5816-cvtres.read.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.5816-cvtres.write.1.tlog
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebuglink.5816.read.1.tlog
............此处省略47个文件信息
#include “StdAfx.h“
#include “Circle.h“
#include “Matrix.h“
#include
CCircle::CCircle(void)
{
}
CCircle::~CCircle(void)
{
}
int CCircle::SplitStringArray(CString str char split CStringArray& aStr)
{
int startIdx = 0;
int idx = str.Find(split startIdx);
aStr.RemoveAll();//先清空
while (-1 != idx)
{
CString sTmp = str.Mid(startIdx idx - startIdx);
aStr.Add(sTmp);
startIdx = idx + 1;
idx = str.Find(split startIdx);
}
CString sTmp = str.Right(str.GetLength() - startIdx);
if (! sTmp.IsEmpty())
aStr.Add(sTmp);
return aStr.GetSize();
}
BOOL CCircle::Reorder(CString& str)
{
CStringArray aStrLine;
PCount=SplitStringArray(str13aStrLine); //得到数据的行数
if(PCount<3)
{
AfxMessageBox(_T(“输入的数据不完整!!!“));
return FALSE;
}
p=new HPOINT [PCount];
CStringArray aStrTmp;
int n;
for(int i=0;i {
n=SplitStringArray(aStrLine[i]‘ ‘aStrTmp);
p[i].x=_tstof(aStrTmp[1]);
p[i].y=_tstof(aStrTmp[2]);
}
return TRUE;
}
BOOL CCircle::LeastSquare(CString& str)
{
CMatrix B(PCount3); //系数矩阵
CMatrix L(PCount1); //常数项阵
CMatrix dX(PCount1); //参数改正数
CMatrix V(PCount1); //残差
CMatrix rou(PCount1);
CMatrix N(33); //法方程系数阵
CMatrix W(31); //法方程常数阵
double x0=0;
double y0=0;
for(int i=0;i {
x0+=p[i].x;
y0+=p[i].y;
}
x0=x0/PCount;
y0=y0/PCount;
double r0=1;
do
{
for(int i=0;i {
rou(i0)=sqrt(pow((p[i].x-x0)2)+pow((p[i].y-y0)2));
B(i0)=(x0-p[i].x)/rou(i0);
B(i1)=(y0-p[i].y)/rou(i0);
B(i2)=-1;
L(i0)=r0-rou(i0);
}
N=~B*B;
W=~B*L;
dX=N.Inv()*W;
x0=x0+dX(00);//拟合直线的斜距
y0=y0+dX(10);//拟合直线的斜率
r0=r0+dX(20);
}while (fabs(dX(20))>1e-5);
//CMatrix V;
V=B*dX-L;
//x=x0;
//y=y0;
//r=r0;
CString strastrbtemp;
stra.Format(_T(“ 圆心坐标X 圆心坐标Y 半径R
%10.4f%10.4f%10.4f
“)x0y0r0);
for(int i=0;i {
strb.Format(_T(“%7.4f
“)V(i0));
temp+=strb;
}
str=stra+“ 残差V=B*dx-L
“+temp;
return true;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 190976 2016-10-20 14:58 FittingCircleDebugFittingCircle.exe
文件 1280792 2016-10-20 14:58 FittingCircleDebugFittingCircle.ilk
文件 5213184 2016-10-20 14:58 FittingCircleDebugFittingCircle.pdb
文件 2162 2016-10-20 14:58 FittingCircleFittingCircleCircle.cpp
文件 497 2016-10-20 14:50 FittingCircleFittingCircleCircle.h
文件 57615 2016-10-20 14:58 FittingCircleFittingCircleDebugCircle.obj
文件 4030 2016-10-20 14:58 FittingCircleFittingCircleDebugcl.command.1.tlog
文件 69954 2016-10-20 14:58 FittingCircleFittingCircleDebugCL.read.1.tlog
文件 4570 2016-10-20 14:58 FittingCircleFittingCircleDebugCL.write.1.tlog
文件 915 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.exe.em
文件 980 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.exe.em
文件 640 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.exe.intermediate.manifest
文件 65 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.lastbuildstate
文件 3355 2016-10-20 14:58 FittingCircleFittingCircleDebugFittingCircle.log
文件 30434 2016-10-20 14:51 FittingCircleFittingCircleDebugFittingCircle.obj
文件 33751040 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.pch
文件 70064 2016-10-20 14:57 FittingCircleFittingCircleDebugFittingCircle.res
文件 713 2016-10-20 11:38 FittingCircleFittingCircleDebugFittingCircle.vcxprojResolveAssemblyReference.cache
文件 0 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle.write.1.tlog
文件 56553 2016-10-20 14:51 FittingCircleFittingCircleDebugFittingCircleDlg.obj
文件 216 2016-10-20 10:57 FittingCircleFittingCircleDebugFittingCircle_manifest.rc
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
文件 2 2016-10-20 14:58 FittingCircleFittingCircleDebugli
............此处省略47个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)