資源簡介
通過最小二乘法計算圓心坐標及半徑,顯示殘差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\r\n%10.4f%10.4f%10.4f\r\n“)x0y0r0);
for(int?i=0;i {
strb.Format(_T(“%7.4f\r\n“)V(i0));
temp+=strb;
}
str=stra+“??殘差V=B*dx-L\r\n“+temp;
return?true;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????190976??2016-10-20?14:58??FittingCircle\Debug\FittingCircle.exe
?????文件????1280792??2016-10-20?14:58??FittingCircle\Debug\FittingCircle.ilk
?????文件????5213184??2016-10-20?14:58??FittingCircle\Debug\FittingCircle.pdb
?????文件???????2162??2016-10-20?14:58??FittingCircle\FittingCircle\Circle.cpp
?????文件????????497??2016-10-20?14:50??FittingCircle\FittingCircle\Circle.h
?????文件??????57615??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\Circle.obj
?????文件???????4030??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\cl.command.1.tlog
?????文件??????69954??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\CL.read.1.tlog
?????文件???????4570??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\CL.write.1.tlog
?????文件????????915??2016-10-20?10:57??FittingCircle\FittingCircle\Debug\FittingCircle.exe.em
?????文件????????980??2016-10-20?10:57??FittingCircle\FittingCircle\Debug\FittingCircle.exe.em
?????文件????????640??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\FittingCircle.exe.intermediate.manifest
?????文件?????????65??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\FittingCircle.lastbuildstate
?????文件???????3355??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\FittingCircle.log
?????文件??????30434??2016-10-20?14:51??FittingCircle\FittingCircle\Debug\FittingCircle.obj
?????文件???33751040??2016-10-20?10:57??FittingCircle\FittingCircle\Debug\FittingCircle.pch
?????文件??????70064??2016-10-20?14:57??FittingCircle\FittingCircle\Debug\FittingCircle.res
?????文件????????713??2016-10-20?11:38??FittingCircle\FittingCircle\Debug\FittingCircle.vcxprojResolveAssemblyReference.cache
?????文件??????????0??2016-10-20?10:57??FittingCircle\FittingCircle\Debug\FittingCircle.write.1.tlog
?????文件??????56553??2016-10-20?14:51??FittingCircle\FittingCircle\Debug\FittingCircleDlg.obj
?????文件????????216??2016-10-20?10:57??FittingCircle\FittingCircle\Debug\FittingCircle_manifest.rc
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
?????文件??????????2??2016-10-20?14:58??FittingCircle\FittingCircle\Debug\li
............此處省略47個文件信息
評論
共有 條評論