19,468
社区成员
发帖
与我相关
我的任务
分享
void CthreeBezeryDlg::OnBnClickedOk()
{
int N;
CDC *pDC=GetDC();
static long p[9][2]={50,400,100,120,260,
180,500,120,600,300,
590,420,50,400,100,120,
260,180};
pDC->MoveTo(p[0][0],p[0][1]);
N=9-3;
p[0][0]=6.0*p[0][0]-4.0*p[1][0]-p[2][0];
p[0][1]=6.0*p[0][1]-4.0*p[1][1]-p[2][1];
p[N-1][0]=6.0*p[N-1][0]-4.0*p[N-2][0]-p[N-3][0];
p[N-1][1]=6.0*p[N-1][1]-4.0*p[N-2][1]-p[N-3][1];
B3_curves('p',p,N-1,pDC);
}
void CthreeBezeryDlg::B3_curves(char pflag,long xq[][2],int m,CDC*pDC)
{
CDC *pdc=GetDC();
int i,j,k=10;
long lx1,ly1;
double t0,t1,t2,t3;
lx1=(xq[0][0]+4.0*xq[1][0]+xq[2][0])/6;
ly1=(xq[0][1]+4.0*xq[1][1]+xq[2][1])/6;
if(pflag=='p')
pDC->MoveTo(lx1,ly1);
for(i=1;i<m;i++)
for(j=0;j<=k;j++)
{
t3=1.0*j/k;
t0=1-t3;
t0=t0*t0*t0/6.0;
t1=((3.0*t3-6.0)*t3*t3+4.0)/6.0;
t2=(((3-3*t3)*t3+3)*t3+1)/6.0;
t3=1.0-t0-t1-t2;
lx1=xq[i-1][0]*t0+xq[i][0]*t1+xq[i+1][0]*t2+xq[i+2][0]*t3;
ly1=xq[i-1][1]*t0+xq[i][1]*t1+xq[i+1][1]*t2+xq[i+2][1]*t3;
if(pflag=='p')
pDC->LineTo(lx1,ly1);
}
}