最小二乘法直线拟合

    技术2022-05-11  135

    //最小二乘法直线拟合BOOL CalculateLineKB(CFoldPointList *m_FoldList,double &k,double &b){ //最小二乘法直线拟合 //m_FoldList为关键点(x,y)的链表 //拟合直线方程(Y=kX+b)

     if(m_FoldList==NULL)return FALSE; long lCount=m_FoldList->GetCount(); if(lCount<2)return FALSE; CFoldPoint *pFold; double mX,mY,mXX,mXY,n; mX=mY=mXX=mXY=0; n=lCount; POSITION pos=m_FoldList->GetHeadPosition(); while(pos != NULL) {  pFold=m_FoldList->GetNext(pos);  mX+=pFold->X;  mY+=pFold->Y;  mXX+=pFold->X*pFold->X;  mXY+=pFold->X*pFold->Y; } if(mX*mX-mXX*n==0)return FALSE; k=(mY*mX-mXY*n)/(mX*mX-mXX*n); b=(mY-mX*k)/n; return TRUE;}


    最新回复(0)