typedef struct { int x; int y; bool w; }gVector; gVector vector[100]; double x0,y0,x2,y2; void CQuadBzrDlg::OnGene2Bzr() { // TODO: Add your control notification handler code here double t=0; double step=0.01; int k=0;//标识点数 int x1=60; int y1=40; x0=30; y0=200; x2=200; y2=100; CDC*pDC=GetDC(); CPen pen,*poldPen; pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); poldPen=pDC->SelectObject(&pen); vector[k].x =((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2); vector[k].y =((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2); pDC->MoveTo(vector[k].x ,vector[k].y ); do{ t=t+step; k++; vector[k].x =((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2); vector[k].y =((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2); pDC->LineTo(vector[k].x ,vector[k].y ); pDC->MoveTo(vector[k].x ,vector[k].y ); }while(t<=1); pDC->SelectObject(poldPen); ReleaseDC(pDC); } void CQuadBzrDlg::On2fitted() { // TODO: Add your control notification handler code here //先计算P1.x double t=0.0; double a=0.0; double b=0.0; double c=0.0; double d=0.0; double x1,y1; int i; for(i=0;i<=100;i++) { a+=vector[i].x *(2*t*(1-t)); t=t+0.01; } t=0.0; for(i=0;i<=100;i++) { b+=x0*((1-t)*(1-t))*2*t*(1-t); t=t+0.01; } t=0.0; for(i=0;i<=100;i++) { c+=x2*(t*t)*(2*t*(1-t)); t=t+0.01; } t=0.0; for(i=0;i<=100;i++) { d+=2*t*(1-t)*2*t*(1-t); t=t+0.01; } x1=(a-b-c)/d; if((x1-(double)((int)x1))*10.0>5.0) x1=x1+1; //计算y1 t=0.0; a=b=c=0.0; for(i=0;i<=100;i++) { a+=vector[i].y *(2*t*(1-t)); t=t+0.01; } t=0.0; for(i=0;i<=100;i++) { b+=y0*((1-t)*(1-t))*2*t*(1-t); t=t+0.01; } t=0.0; for(i=0;i<=100;i++) { c+=y2*(t*t)*(2*t*(1-t)); t=t+0.01; } t=0.0; y1=(a-b-c)/d; if((y1-(double)((int)y1))*10.0>5.0) y1=y1+1; //画出拟合曲线 CDC*pDC=GetDC(); CPen pen,*poldPen; pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); poldPen=pDC->SelectObject(&pen); //pDC->SelectObject(poldPen); // vector[k].x =((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2); // vector[k].y =((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2); pDC->MoveTo(((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2) ,((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2)); do{ t=t+0.01; // k++; // vector[k].x =((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2); // vector[k].y =((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2); pDC->LineTo(((1-t)*(1-t)*x0)+(2*t*(1-t)*x1)+(t*t*x2) ,((1-t)*(1-t)*y0)+(2*t*(1-t)*y1)+(t*t*y2) ); }while(t<=1); ReleaseDC(pDC); }