MFC编写的圆拟合工具


通过最小二乘法计算圆心坐标及半径,显示残差V=B*dX-L
资源截图
代码片段和文件信息
#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.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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)