void matM(int n) { if(n>1) { matM(n/2); mul(0);//m*m } if(n%2!=0) mul(1);//m*{1,1,1,0} }
void main() { printf("%d\n",fib(2));//1,1,2,3,5,8,13,21,34 int n=9; matM(n-1); printf("%d th fibonacci no.. %d\n",n,M[0][0]); printf("%d th fibonacci no.. %d\n",n,fib2(n)); printf("\nif %d is..perfect square...%d\n",120,perfectSqr(120.0)); printf("\nif %d is fbonacci no..%d\n",34,chkFib(34)); }
static Mat _localAffineEstimate(const std::vector<Point2f>& shape1, const std::vector<Point2f>& shape2, bool fullAfine) { Mat out(2,3,CV_32F); int siz=2*(int)shape1.size(); if (fullAfine) { Mat matM(siz, 6, CV_32F); Mat matP(siz,1,CV_32F); int contPt=0; for (int ii=0; ii<siz; ii++) { Mat therow = Mat::zeros(1,6,CV_32F); if (ii%2==0) { therow.at<float>(0,0)=shape1[contPt].x; therow.at<float>(0,1)=shape1[contPt].y; therow.at<float>(0,2)=1; therow.row(0).copyTo(matM.row(ii)); matP.at<float>(ii,0) = shape2[contPt].x; } else { therow.at<float>(0,3)=shape1[contPt].x; therow.at<float>(0,4)=shape1[contPt].y; therow.at<float>(0,5)=1; therow.row(0).copyTo(matM.row(ii)); matP.at<float>(ii,0) = shape2[contPt].y; contPt++; } } Mat sol; solve(matM, matP, sol, DECOMP_SVD); out = sol.reshape(0,2); } else { Mat matM(siz, 4, CV_32F); Mat matP(siz,1,CV_32F); int contPt=0; for (int ii=0; ii<siz; ii++) { Mat therow = Mat::zeros(1,4,CV_32F); if (ii%2==0) { therow.at<float>(0,0)=shape1[contPt].x; therow.at<float>(0,1)=shape1[contPt].y; therow.at<float>(0,2)=1; therow.row(0).copyTo(matM.row(ii)); matP.at<float>(ii,0) = shape2[contPt].x; } else { therow.at<float>(0,0)=-shape1[contPt].y; therow.at<float>(0,1)=shape1[contPt].x; therow.at<float>(0,3)=1; therow.row(0).copyTo(matM.row(ii)); matP.at<float>(ii,0) = shape2[contPt].y; contPt++; } } Mat sol; solve(matM, matP, sol, DECOMP_SVD); out.at<float>(0,0)=sol.at<float>(0,0); out.at<float>(0,1)=sol.at<float>(1,0); out.at<float>(0,2)=sol.at<float>(2,0); out.at<float>(1,0)=-sol.at<float>(1,0); out.at<float>(1,1)=sol.at<float>(0,0); out.at<float>(1,2)=sol.at<float>(3,0); } return out; }